一种共享内存分配方法.pdf

上传人:1****2 文档编号:1490890 上传时间:2018-06-18 格式:PDF 页数:8 大小:875.19KB
返回 下载 相关 举报
摘要
申请专利号:

CN201310376038.4

申请日:

2013.08.26

公开号:

CN103440203A

公开日:

2013.12.11

当前法律状态:

授权

有效性:

有权

法律详情:

专利权的保全IPC(主分类):G06F 12/02申请日:20130826授权公告日:20170725登记生效日:20180313|||授权|||实质审查的生效IPC(主分类):G06F 12/02申请日:20130826|||公开

IPC分类号:

G06F12/02; G06F17/30

主分类号:

G06F12/02

申请人:

上海斐讯数据通信技术有限公司

发明人:

李小庆

地址:

201616 上海市松江区广富林路4855号大业领地90号楼

优先权:

专利代理机构:

代理人:

PDF下载: PDF下载
内容摘要

一种共享内存分配方法,包括:步骤1:将分配的共享内存等分成小的内存块,所有内存块的使用情况用一个比特表记录;步骤2:根据申请使用的内存大小计算出连续内存块的块数S;步骤3:遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块。采用本发明的方法后,采用本发明的方法后,通过查看比特表方便了解共享内存的内存块占用情况,随时为进程需要分配共享内存。内存块数据部分的指针使用指针所指地址与共享内存起始地址的偏移量代替,使各个进程的读写彼此看得见,实现共享内存的动态分配。

权利要求书

权利要求书
1.  一种共享内存分配方法,其特征在于,包括:
步骤1:将分配的共享内存等分成小的内存块,所有内存块的使用情况用一个比特表记录;
步骤2:根据申请使用的内存大小计算出连续内存块的块数S;
步骤3:遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块。

2.  根据权利要求1所述的共享内存分配方法,其特征在于,所述所有内存块的使用情况用一个比特表记录具体为:
比特表中的每一个比特代表一个块,0表示对应内存块没有被占用,1表示对应内存块已经被占用。

3.  根据权利要求1所述的共享内存分配方法,其特征在于,所述内存块为16字节。

4.  根据权利要求1所述的共享内存分配方法,其特征在于,所述连续块的起始块分为用于存放连续块的块数S的头部与用于存放数据的数据部,连续块的其他块全部用于存放数据。

5.  根据权利要求4所述的共享内存分配方法,其特征在于,当要存放的数据为指针时,全部改为指针所指地址与共享内存起始地址的偏移量。

6.  根据权利要求4所述的共享内存分配方法,其特征在于,还包括内存释放步骤,根据连续块的起始块的头部中的块数S从连续块起始位置释放连续S块内存块。

7.  根据权利要求6所述的共享内存分配方法,其特征在于,在比特表中把已经释放的内存块标记。

说明书

说明书一种共享内存分配方法
技术领域
本发明涉及共享内存技术领域,特别是涉及一种共享内存的分配方法。
背景技术
当前的共享内存分配器主要用于有亲属关系的进程之间。具体操作为,父进程创建共享内存,在共享内存中进行动态分配,所有的数据达到完整状态后,通过fork创建子进程。
由于子进程复制了父进程的地址空间,所以在父进程中设置好的数据结构对其是可见的,从而达到共享数据结构的目的。当前方案有弊端,首先,只能在有亲属关系的进程之间使用,其次,共享内存的数据结构设置好后就无法修改,因为进程的地址空间是独立的,在任何进程中做的修改都不可能被其他进程看见。严格来说,这个方案只是节约了内存,并非真正的动态内存分配。
本发明对进程间的关系没有要求,内存的分配在任何时候都可以进行,共享内存的所有进程都可以看到别的进程的修改。
发明内容
基于此,有必要提供任何时候都可以进行内存分配的共享内存分配方法。
一种共享内存分配方法,包括:
步骤1:将分配的共享内存等分成小的内存块,所有内存块的使用情况用一个比特表记录;
步骤2:根据申请使用的内存大小计算出连续内存块的块数S;
步骤3:遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块。
进一步的,所述所有内存块的使用情况用一个比特表记录具体为:
比特表中的每一个比特代表一个块,0表示对应内存块没有被占用,1表示对应内存块已经被占用。
进一步的,所述内存块为16字节。
进一步的,所述连续块的起始块分为用于存放连续块的块数S的头部与用于存放数据的数据部,连续块的其他块全部用于存放数据。
进一步的,当要存放的数据为指针时,当要存放的数据为指针时,全部改为指针所指地址与共享内存起始地址的偏移量。
进一步的,还包括内存释放步骤,根据连续块的起始块的头部中的块数S从连续块起始位置释放连续S块内存块。
进一步的,在比特表中把已经释放的内存块标记。
采用本发明的方法后,采用本发明的方法后,通过查看比特表方便了解共享内存的内存块占用情况,随时为进程需要分配共享内存。内存块数据部分的指针使用指针所指地址与共享内存起始地址的偏移量代替,使各个进程的读写彼此看得见,实现共享内存的动态分配。
附图说明
图1为本发明提供的共享内存分配方法的的流程图;
图2为本发明所述的比特表的示意图;
图3为本发明所述的连续块的示意图;
图4为本发明所述的共享内存在进程间的地址空间映射图。
具体实施方式
为了使本发明的目的、技术方案及优点更清楚明白,以下结合附图及实施例,对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参阅图1,本发明提供的一个实施例的共享内存分配方法,包括:
步骤S100,将分配的共享内存等分成小的内存块,所有内存块的使用情况用一个比特表记录;
将分配的共享内存等分成小的内存块,例如分为16字节的内存块。所有内存块的使用情况用一个比特表记录。
在优选实施方式中,如图2所示,比特表中的每一个比特代表一个块,0表示对应内存块没有被占用,1表示对应内存块已经被占用。
步骤S200,根据申请使用的内存大小计算出连续内存块的块数S;
如图3所示,连续内存块的起始块分为用于存放连续块的块数S的头部head与用于存放数据的数据部data,连续块的其他块全部用于存放数据data。在计算连续块的块数S时,需把连续块的起始块的头部head计算在内,即:如果现在需要分配一个大小为M的共享内存,则用“(M+所述头部head所占大小)/内存块的大小”去计算实际需要申请的连续块的块数S。
步骤S300,遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块;
结合图2,假如需要一个块数为2的连续块,共享内存如图2中的比特表所示。首先,遍历整个比特表,把块数大于等于2的联系找出来,图2中符合这个条件的连续块有3个,块数分别为2、4、3,选择其中最小的一个连续块,即块数为2的连续块,提高共享内存的利用率。当然,如果遍历整个比特表,假如出现块数为2的连续块有两个,则选择在比特表中靠前的连续块,当然也可以选择靠后的。其他情况在此就不再赘述,以此类推。
步骤S400,根据连续块的起始块的头部中的块数S从连续块起始位置释放连续S块内存块。
分配的共享内存在进程使用完之后,需要进行释放,以使内存重复使用,提高内存使用率。在释放完内存后,在比特表中把已经释放的内存块标记,示出内存块为未被占用,可以被重新分配,本实施例中,标记为“0”。
参阅图4,当存放的数据data为指针时,全部改为指针所指地址与共享内存起始地址的偏移量。共享内存在各个进程中的地址空间不一样,所以相同的指针指向的共享内存不一致,导致无法实现共享的目的,即各个进程对共享内存的读写彼此看不见。如图,一段1G的共享内存在进程1和进程2中的地址是不一样的,分别为0-1G和0.5G-1.5G。假如共享内存中某一个内存块中的数据data为指针,指向地址0.75G,在进程1中指向0.75G,在进程2中也指向0.75G,但两个地址空间指向不同的共享内存,即指针对于进程1和进程2不是相同的 数据。当把指针改为指针所指地址与共享内存起始地址的偏移量时,利用函数,把共享内存在进程中的地址的起始地址加上偏移量,即不管共享内存在各个进程中的空间地址如何,指向的共享内存是相同的,即偏移量对于各个进程是相同的数据,是可以共享,对它的读写也可以彼此看见。
采用本发明的方法后,通过查看比特表方便了解共享内存的内存块占用情况,随时为进程需要分配共享内存。内存块数据部分的指针使用指针所指地址与共享内存起始地址的偏移量代替,使各个进程的读写彼此看得见,实现共享内存的动态分配。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

一种共享内存分配方法.pdf_第1页
第1页 / 共8页
一种共享内存分配方法.pdf_第2页
第2页 / 共8页
一种共享内存分配方法.pdf_第3页
第3页 / 共8页
点击查看更多>>
资源描述

《一种共享内存分配方法.pdf》由会员分享,可在线阅读,更多相关《一种共享内存分配方法.pdf(8页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103440203 A(43)申请公布日 2013.12.11CN103440203A*CN103440203A*(21)申请号 201310376038.4(22)申请日 2013.08.26G06F 12/02(2006.01)G06F 17/30(2006.01)(71)申请人上海斐讯数据通信技术有限公司地址 201616 上海市松江区广富林路4855号大业领地90号楼(72)发明人李小庆(54) 发明名称一种共享内存分配方法(57) 摘要一种共享内存分配方法,包括:步骤1:将分配的共享内存等分成小的内存块,所有内存块的使用情况用一个比特表记录;步骤2:根据申请。

2、使用的内存大小计算出连续内存块的块数S;步骤3:遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块。采用本发明的方法后,采用本发明的方法后,通过查看比特表方便了解共享内存的内存块占用情况,随时为进程需要分配共享内存。内存块数据部分的指针使用指针所指地址与共享内存起始地址的偏移量代替,使各个进程的读写彼此看得见,实现共享内存的动态分配。(51)Int.Cl.权利要求书1页 说明书3页 附图3页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书1页 说明书3页 附图3页(10)申请公布号 CN 103440203 ACN 103440203 A1/1页21.一种共享内存分配。

3、方法,其特征在于,包括:步骤1:将分配的共享内存等分成小的内存块,所有内存块的使用情况用一个比特表记录;步骤2:根据申请使用的内存大小计算出连续内存块的块数S;步骤3:遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块。2.根据权利要求1所述的共享内存分配方法,其特征在于,所述所有内存块的使用情况用一个比特表记录具体为:比特表中的每一个比特代表一个块,0表示对应内存块没有被占用,1表示对应内存块已经被占用。3.根据权利要求1所述的共享内存分配方法,其特征在于,所述内存块为16字节。4.根据权利要求1所述的共享内存分配方法,其特征在于,所述连续块的起始块分为用于存放连续块的块数S的头部与。

4、用于存放数据的数据部,连续块的其他块全部用于存放数据。5.根据权利要求4所述的共享内存分配方法,其特征在于,当要存放的数据为指针时,全部改为指针所指地址与共享内存起始地址的偏移量。6.根据权利要求4所述的共享内存分配方法,其特征在于,还包括内存释放步骤,根据连续块的起始块的头部中的块数S从连续块起始位置释放连续S块内存块。7.根据权利要求6所述的共享内存分配方法,其特征在于,在比特表中把已经释放的内存块标记。权 利 要 求 书CN 103440203 A1/3页3一种共享内存分配方法技术领域0001 本发明涉及共享内存技术领域,特别是涉及一种共享内存的分配方法。背景技术0002 当前的共享内存。

5、分配器主要用于有亲属关系的进程之间。具体操作为,父进程创建共享内存,在共享内存中进行动态分配,所有的数据达到完整状态后,通过fork创建子进程。0003 由于子进程复制了父进程的地址空间,所以在父进程中设置好的数据结构对其是可见的,从而达到共享数据结构的目的。当前方案有弊端,首先,只能在有亲属关系的进程之间使用,其次,共享内存的数据结构设置好后就无法修改,因为进程的地址空间是独立的,在任何进程中做的修改都不可能被其他进程看见。严格来说,这个方案只是节约了内存,并非真正的动态内存分配。0004 本发明对进程间的关系没有要求,内存的分配在任何时候都可以进行,共享内存的所有进程都可以看到别的进程的修。

6、改。发明内容0005 基于此,有必要提供任何时候都可以进行内存分配的共享内存分配方法。0006 一种共享内存分配方法,包括:0007 步骤1:将分配的共享内存等分成小的内存块,所有内存块的使用情况用一个比特表记录;0008 步骤2:根据申请使用的内存大小计算出连续内存块的块数S;0009 步骤3:遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块。0010 进一步的,所述所有内存块的使用情况用一个比特表记录具体为:0011 比特表中的每一个比特代表一个块,0表示对应内存块没有被占用,1表示对应内存块已经被占用。0012 进一步的,所述内存块为16字节。0013 进一步的,所述连续块的起。

7、始块分为用于存放连续块的块数S的头部与用于存放数据的数据部,连续块的其他块全部用于存放数据。0014 进一步的,当要存放的数据为指针时,当要存放的数据为指针时,全部改为指针所指地址与共享内存起始地址的偏移量。0015 进一步的,还包括内存释放步骤,根据连续块的起始块的头部中的块数S从连续块起始位置释放连续S块内存块。0016 进一步的,在比特表中把已经释放的内存块标记。0017 采用本发明的方法后,采用本发明的方法后,通过查看比特表方便了解共享内存的内存块占用情况,随时为进程需要分配共享内存。内存块数据部分的指针使用指针所指地址与共享内存起始地址的偏移量代替,使各个进程的读写彼此看得见,实现共。

8、享内存的说 明 书CN 103440203 A2/3页4动态分配。附图说明0018 图1为本发明提供的共享内存分配方法的的流程图;0019 图2为本发明所述的比特表的示意图;0020 图3为本发明所述的连续块的示意图;0021 图4为本发明所述的共享内存在进程间的地址空间映射图。具体实施方式0022 为了使本发明的目的、技术方案及优点更清楚明白,以下结合附图及实施例,对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。0023 参阅图1,本发明提供的一个实施例的共享内存分配方法,包括:0024 步骤S100,将分配的共享内存等分成小的内存块,所有内存块。

9、的使用情况用一个比特表记录;0025 将分配的共享内存等分成小的内存块,例如分为16字节的内存块。所有内存块的使用情况用一个比特表记录。0026 在优选实施方式中,如图2所示,比特表中的每一个比特代表一个块,0表示对应内存块没有被占用,1表示对应内存块已经被占用。0027 步骤S200,根据申请使用的内存大小计算出连续内存块的块数S;0028 如图3所示,连续内存块的起始块分为用于存放连续块的块数S的头部head与用于存放数据的数据部data,连续块的其他块全部用于存放数据data。在计算连续块的块数S时,需把连续块的起始块的头部head计算在内,即:如果现在需要分配一个大小为M的共享内存,则。

10、用“(M+所述头部head所占大小)/内存块的大小”去计算实际需要申请的连续块的块数S。0029 步骤S300,遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块;0030 结合图2,假如需要一个块数为2的连续块,共享内存如图2中的比特表所示。首先,遍历整个比特表,把块数大于等于2的联系找出来,图2中符合这个条件的连续块有3个,块数分别为2、4、3,选择其中最小的一个连续块,即块数为2的连续块,提高共享内存的利用率。当然,如果遍历整个比特表,假如出现块数为2的连续块有两个,则选择在比特表中靠前的连续块,当然也可以选择靠后的。其他情况在此就不再赘述,以此类推。0031 步骤S400,根据。

11、连续块的起始块的头部中的块数S从连续块起始位置释放连续S块内存块。0032 分配的共享内存在进程使用完之后,需要进行释放,以使内存重复使用,提高内存使用率。在释放完内存后,在比特表中把已经释放的内存块标记,示出内存块为未被占用,可以被重新分配,本实施例中,标记为“0”。0033 参阅图4,当存放的数据data为指针时,全部改为指针所指地址与共享内存起始地址的偏移量。共享内存在各个进程中的地址空间不一样,所以相同的指针指向的共享内存不一致,导致无法实现共享的目的,即各个进程对共享内存的读写彼此看不见。如图,一说 明 书CN 103440203 A3/3页5段1G的共享内存在进程1和进程2中的地址。

12、是不一样的,分别为0-1G和0.5G-1.5G。假如共享内存中某一个内存块中的数据data为指针,指向地址0.75G,在进程1中指向0.75G,在进程2中也指向0.75G,但两个地址空间指向不同的共享内存,即指针对于进程1和进程2不是相同的数据。当把指针改为指针所指地址与共享内存起始地址的偏移量时,利用函数,把共享内存在进程中的地址的起始地址加上偏移量,即不管共享内存在各个进程中的空间地址如何,指向的共享内存是相同的,即偏移量对于各个进程是相同的数据,是可以共享,对它的读写也可以彼此看见。0034 采用本发明的方法后,通过查看比特表方便了解共享内存的内存块占用情况,随时为进程需要分配共享内存。。

13、内存块数据部分的指针使用指针所指地址与共享内存起始地址的偏移量代替,使各个进程的读写彼此看得见,实现共享内存的动态分配。0035 以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。说 明 书CN 103440203 A1/3页6图1说 明 书 附 图CN 103440203 A2/3页7图2图3说 明 书 附 图CN 103440203 A3/3页8图4说 明 书 附 图CN 103440203 A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1