CN103440203A - 一种共享内存分配方法 - Google Patents
一种共享内存分配方法 Download PDFInfo
- Publication number
- CN103440203A CN103440203A CN2013103760384A CN201310376038A CN103440203A CN 103440203 A CN103440203 A CN 103440203A CN 2013103760384 A CN2013103760384 A CN 2013103760384A CN 201310376038 A CN201310376038 A CN 201310376038A CN 103440203 A CN103440203 A CN 103440203A
- Authority
- CN
- China
- Prior art keywords
- shared drive
- memory
- piece
- blocks
- distribution method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000000151 deposition Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 description 26
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
Images
Landscapes
- Memory System (AREA)
Abstract
一种共享内存分配方法,包括:步骤1:将分配的共享内存等分成小的内存块,所有内存块的使用情况用一个比特表记录;步骤2:根据申请使用的内存大小计算出连续内存块的块数S;步骤3:遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块。采用本发明的方法后,采用本发明的方法后,通过查看比特表方便了解共享内存的内存块占用情况,随时为进程需要分配共享内存。内存块数据部分的指针使用指针所指地址与共享内存起始地址的偏移量代替,使各个进程的读写彼此看得见,实现共享内存的动态分配。
Description
技术领域
本发明涉及共享内存技术领域,特别是涉及一种共享内存的分配方法。
背景技术
当前的共享内存分配器主要用于有亲属关系的进程之间。具体操作为,父进程创建共享内存,在共享内存中进行动态分配,所有的数据达到完整状态后,通过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不是相同的数据。当把指针改为指针所指地址与共享内存起始地址的偏移量时,利用函数,把共享内存在进程中的地址的起始地址加上偏移量,即不管共享内存在各个进程中的空间地址如何,指向的共享内存是相同的,即偏移量对于各个进程是相同的数据,是可以共享,对它的读写也可以彼此看见。
采用本发明的方法后,通过查看比特表方便了解共享内存的内存块占用情况,随时为进程需要分配共享内存。内存块数据部分的指针使用指针所指地址与共享内存起始地址的偏移量代替,使各个进程的读写彼此看得见,实现共享内存的动态分配。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (7)
1.一种共享内存分配方法,其特征在于,包括:
步骤1:将分配的共享内存等分成小的内存块,所有内存块的使用情况用一个比特表记录;
步骤2:根据申请使用的内存大小计算出连续内存块的块数S;
步骤3:遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块。
2.根据权利要求1所述的共享内存分配方法,其特征在于,所述所有内存块的使用情况用一个比特表记录具体为:
比特表中的每一个比特代表一个块,0表示对应内存块没有被占用,1表示对应内存块已经被占用。
3.根据权利要求1所述的共享内存分配方法,其特征在于,所述内存块为16字节。
4.根据权利要求1所述的共享内存分配方法,其特征在于,所述连续块的起始块分为用于存放连续块的块数S的头部与用于存放数据的数据部,连续块的其他块全部用于存放数据。
5.根据权利要求4所述的共享内存分配方法,其特征在于,当要存放的数据为指针时,全部改为指针所指地址与共享内存起始地址的偏移量。
6.根据权利要求4所述的共享内存分配方法,其特征在于,还包括内存释放步骤,根据连续块的起始块的头部中的块数S从连续块起始位置释放连续S块内存块。
7.根据权利要求6所述的共享内存分配方法,其特征在于,在比特表中把已经释放的内存块标记。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310376038.4A CN103440203B (zh) | 2013-08-26 | 2013-08-26 | 一种共享内存分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310376038.4A CN103440203B (zh) | 2013-08-26 | 2013-08-26 | 一种共享内存分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103440203A true CN103440203A (zh) | 2013-12-11 |
CN103440203B CN103440203B (zh) | 2017-07-25 |
Family
ID=49693894
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310376038.4A Expired - Fee Related CN103440203B (zh) | 2013-08-26 | 2013-08-26 | 一种共享内存分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103440203B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112995610A (zh) * | 2021-04-21 | 2021-06-18 | 浙江所托瑞安科技集团有限公司 | 共享内存在多路视频监控中运用的方法 |
CN113312322A (zh) * | 2021-04-21 | 2021-08-27 | 厦门芯泰达集成电路有限公司 | Stdf文件的读写方法、介质、设备及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1205549C (zh) * | 1998-06-30 | 2005-06-08 | 太阳微系统有限公司 | 用于多-线程虚拟机的存储器分配的方法和装置 |
CN102063378A (zh) * | 2010-12-17 | 2011-05-18 | 天津曙光计算机产业有限公司 | 一种在内核中高速分配连续内存的方法 |
CN103034544A (zh) * | 2012-12-04 | 2013-04-10 | 杭州迪普科技有限公司 | 一种用户态与内核态共享内存的管理方法和装置 |
-
2013
- 2013-08-26 CN CN201310376038.4A patent/CN103440203B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1205549C (zh) * | 1998-06-30 | 2005-06-08 | 太阳微系统有限公司 | 用于多-线程虚拟机的存储器分配的方法和装置 |
CN102063378A (zh) * | 2010-12-17 | 2011-05-18 | 天津曙光计算机产业有限公司 | 一种在内核中高速分配连续内存的方法 |
CN103034544A (zh) * | 2012-12-04 | 2013-04-10 | 杭州迪普科技有限公司 | 一种用户态与内核态共享内存的管理方法和装置 |
Non-Patent Citations (1)
Title |
---|
FULLSAIL: "C++容器模板在共享内存中的使用", 《HTTP://WWW.CNBLOGS.COM/FULLSAIL/ARCHIVE/2013/01/20/2868898.HTML》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112995610A (zh) * | 2021-04-21 | 2021-06-18 | 浙江所托瑞安科技集团有限公司 | 共享内存在多路视频监控中运用的方法 |
CN113312322A (zh) * | 2021-04-21 | 2021-08-27 | 厦门芯泰达集成电路有限公司 | Stdf文件的读写方法、介质、设备及装置 |
CN113312322B (zh) * | 2021-04-21 | 2022-04-01 | 厦门芯泰达集成电路有限公司 | Stdf文件的读写方法、介质、设备及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103440203B (zh) | 2017-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104317742B (zh) | 一种优化空间管理的自动精简配置方法 | |
EP3367251A1 (en) | Storage system and solid state hard disk | |
CN103577336B (zh) | 一种存储数据处理方法及装置 | |
US20110246742A1 (en) | Memory pooling in segmented memory architecture | |
US20150095555A1 (en) | Method of thin provisioning in a solid state disk array | |
US20090210464A1 (en) | Storage management system and method thereof | |
CN101692252B (zh) | 文件空闲块的分配和回收方法 | |
CN105389376B (zh) | 基于连续块的无碎片化多媒体数据存储方法及系统 | |
CN106201355A (zh) | 数据处理方法和装置以及存储系统 | |
JP2012533099A (ja) | ストレージシステム、ストレージ装置、ストレージシステムの記憶領域の最適化方法 | |
US7861056B2 (en) | Methods, systems, and computer program products for providing memory management with constant defragmentation time | |
CA2978927C (en) | Data check method and storage system | |
CN106844050A (zh) | 一种内存分配方法及装置 | |
CN106406759A (zh) | 一种数据存储方法及装置 | |
CN106445835A (zh) | 内存分配方法与装置 | |
CN103218305B (zh) | 存储空间的分配方法 | |
CN109815005A (zh) | 一种管理内存的方法、装置和存储系统 | |
CN103440203A (zh) | 一种共享内存分配方法 | |
CN105389266B (zh) | 一种数据管理方法及装置 | |
CN103823640B (zh) | 一种Flash存储器的高效率存储方法 | |
EP4060515A1 (en) | Multi-layer data storage system | |
CN103780712A (zh) | 一种地址转换设备分配端口的方法和地址转换设备 | |
CN114020711A (zh) | 存储空间处理方法、装置、电子设备及可读存储介质 | |
CN106462491A (zh) | 一种存储数据的管理方法、存储管理器及存储系统 | |
CN107704199A (zh) | 一种固态硬盘的逻辑分区方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
PP01 | Preservation of patent right | ||
PP01 | Preservation of patent right |
Effective date of registration: 20180313 Granted publication date: 20170725 |
|
PD01 | Discharge of preservation of patent |
Date of cancellation: 20210313 Granted publication date: 20170725 |
|
PD01 | Discharge of preservation of patent | ||
PP01 | Preservation of patent right | ||
PP01 | Preservation of patent right |
Effective date of registration: 20210313 Granted publication date: 20170725 |
|
PD01 | Discharge of preservation of patent | ||
PD01 | Discharge of preservation of patent |
Date of cancellation: 20240313 Granted publication date: 20170725 |
|
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170725 |