CN103440203B - 一种共享内存分配方法 - Google Patents

一种共享内存分配方法 Download PDF

Info

Publication number
CN103440203B
CN103440203B CN201310376038.4A CN201310376038A CN103440203B CN 103440203 B CN103440203 B CN 103440203B CN 201310376038 A CN201310376038 A CN 201310376038A CN 103440203 B CN103440203 B CN 103440203B
Authority
CN
China
Prior art keywords
shared drive
block
blocks
memory
memory block
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.)
Active
Application number
CN201310376038.4A
Other languages
English (en)
Other versions
CN103440203A (zh
Inventor
李小庆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Feixun Data Communication Technology Co Ltd
Original Assignee
Shanghai Feixun Data Communication Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Feixun Data Communication Technology Co Ltd filed Critical Shanghai Feixun Data Communication Technology Co Ltd
Priority to CN201310376038.4A priority Critical patent/CN103440203B/zh
Publication of CN103440203A publication Critical patent/CN103440203A/zh
Application granted granted Critical
Publication of CN103440203B publication Critical patent/CN103440203B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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 (5)

1.一种共享内存分配方法,其特征在于,包括:
步骤1:将分配的共享内存等分成小的内存块,所有内存块的使用情况用一个比特表记录;
步骤2:根据申请使用的内存大小计算出连续内存块的块数S;所述连续块的起始块分为用于存放连续块的块数S的头部与用于存放数据的数据部,连续块的其他块全部用于存放数据;
步骤3:遍历所述比特表,选择块数大于等于S且是其中最小的一个连续块;
当要存放的数据为指针时,全部改为指针所指地址与共享内存起始地址的偏移量。
2.根据权利要求1所述的共享内存分配方法,其特征在于,所述所有内存块的使用情况用一个比特表记录具体为:
比特表中的每一个比特代表一个块,0表示对应内存块没有被占用,1表示对应内存块已经被占用。
3.根据权利要求1所述的共享内存分配方法,其特征在于,所述内存块为16字节。
4.根据权利要求1所述的共享内存分配方法,其特征在于,还包括内存释放步骤,根据连续块的起始块的头部中的块数S从连续块起始位置释放连续S块内存块。
5.根据权利要求4所述的共享内存分配方法,其特征在于,在比特表中把已经释放的内存块标记。
CN201310376038.4A 2013-08-26 2013-08-26 一种共享内存分配方法 Active CN103440203B (zh)

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 CN103440203A (zh) 2013-12-11
CN103440203B true CN103440203B (zh) 2017-07-25

Family

ID=49693894

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310376038.4A Active CN103440203B (zh) 2013-08-26 2013-08-26 一种共享内存分配方法

Country Status (1)

Country Link
CN (1) CN103440203B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112995610A (zh) * 2021-04-21 2021-06-18 浙江所托瑞安科技集团有限公司 共享内存在多路视频监控中运用的方法
CN113312322B (zh) * 2021-04-21 2022-04-01 厦门芯泰达集成电路有限公司 Stdf文件的读写方法、介质、设备及装置

Citations (3)

* Cited by examiner, † Cited by third party
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 杭州迪普科技有限公司 一种用户态与内核态共享内存的管理方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
C++容器模板在共享内存中的使用;fullsail;《http://www.cnblogs.com/fullsail/archive/2013/01/20/2868898.html》;20130120;第1-6页 *

Also Published As

Publication number Publication date
CN103440203A (zh) 2013-12-11

Similar Documents

Publication Publication Date Title
CN103902465B (zh) 一种固态硬盘垃圾回收的方法、系统和固态硬盘控制器
CN100382048C (zh) 一种内存管理方法
CN108984744B (zh) 一种非主链区块自增长方法
CN101605100B (zh) 队列存储空间的管理方法和设备
CN102591789B (zh) 存储空间回收方法及装置
CN102968378B (zh) 一种内存分配和释放的方法、装置及系统
CN105373487B (zh) 一种存储操作系统的碎片整理方法及系统
CN105511806B (zh) 处理写请求的方法和移动终端
CN106708968A (zh) 分布式数据库系统和分布式数据库系统中的数据处理方法
CN103440203B (zh) 一种共享内存分配方法
WO2005033908A3 (en) Methods, computer systems, and computer readable media for controlling the status of network address space
CN101859279A (zh) 一种内存分配、释放方法及装置
CN106527963A (zh) 存储器系统及主机装置
CN106598495A (zh) 一种混合存储服务质量的控制方法及控制装置
CN106445835A (zh) 内存分配方法与装置
CN103425435A (zh) 磁盘存储方法及磁盘存储系统
CN108304259A (zh) 内存管理方法及系统
CN106980680A (zh) 数据存储方法及存储设备
CN104281535A (zh) 一种映射表在内存中的处理方法和装置
CN102253898A (zh) 一种图像数据的内存管理方法及装置
CN106843753A (zh) 一种分布式存储中协议使用缓存的方法及装置
US20130061009A1 (en) High Performance Free Buffer Allocation and Deallocation
CN106155917A (zh) 内存管理方法及装置
US20070022269A1 (en) Storage space management methods and systems
CN103605478A (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

Effective date of registration: 20180313

Granted publication date: 20170725

PP01 Preservation of patent right
PD01 Discharge of preservation of patent
PD01 Discharge of preservation of patent

Date of cancellation: 20210313

Granted publication date: 20170725

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

Date of cancellation: 20240313

Granted publication date: 20170725