CN102999434A - 一种内存管理方法及装置 - Google Patents
一种内存管理方法及装置 Download PDFInfo
- Publication number
- CN102999434A CN102999434A CN2011102739989A CN201110273998A CN102999434A CN 102999434 A CN102999434 A CN 102999434A CN 2011102739989 A CN2011102739989 A CN 2011102739989A CN 201110273998 A CN201110273998 A CN 201110273998A CN 102999434 A CN102999434 A CN 102999434A
- Authority
- CN
- China
- Prior art keywords
- memory node
- node
- free memory
- chained list
- idle
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种内存管理方法及装置,用以解决现有技术中存在的内存管理效率较低的问题。维护一个由空闲内存结点链接而成的空闲结点链表,使用头指针指向空闲结点链表上首个空闲内存结点,使用尾指针指向空闲结点链表上末个空闲内存结点,使用链指针链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接的两个相邻的空闲内存结点中位置在后的空闲内存结点,在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关指针信息维护删除该分配的空闲内存结点之后的空闲结点链表;和/或,在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息维护增加该回收的内存结点之后的空闲结点链表。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种内存管理方法及装置。
背景技术
内存管理是应用程序运行时对计算机内存分配和使用的技术,其最主要的目的是高效、快速的分配内存,并且在适当的时候释放和回收内存。在计算机工程实践中,内存管理是一个不可回避的问题,经常需要频繁的分配和回收内存。在内存管理中引入了内存结点的概念,内存结点是指特定大小的一个内存块,而内存块是应用程序操作内存的基本单位。
现有技术中,常见的内存管理方案是使用两个链表实现内存分配和回收,一个链表管理已分配内存结点(UsedNode),称为已分配结点链表;另一个链表管理空闲内存结点(FreeNode),称为空闲结点链表。在分配内存时,从空闲结点链表上取下一个空闲内存结点使用,并将该取下的空闲内存结点放置到已分配结点链表上;在回收内存时,将已回收的内存结点从已分配结点链表上取下,放置到空闲结点链表上。如此将内存结点在空闲结点链表和已分配结点链表上转换达到内存管理的目的。
现有的内存管理方案,存在如下技术问题:
在管理内存的时候,需要维护和管理两个链表,每分配或者回收一个内存结点,都需要操作两个链表上的链指针,导致内存管理效率较低,并且两个链表的维护和管理在程序设计和实现时较为复杂。
发明内容
本申请提供一种内存管理方法及装置,用以解决现有技术中存在的内存管理效率较低的问题。
本申请提供的内存管理方法,维护一个由空闲内存结点链接而成的空闲结点链表,使用头指针指向空闲结点链表上首个空闲内存结点,使用尾指针指向空闲结点链表上末个空闲内存结点,使用链指针链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接的两个相邻的空闲内存结点中位置在后的空闲内存结点,所述方法包括:
在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关指针信息维护删除该分配的空闲内存结点之后的空闲结点链表;和/或,
在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息维护增加该回收的内存结点之后的空闲结点链表。
本申请提供的内存管理装置,包括:
第一指针存储单元,用于存储由空闲内存结点链接而成的空闲结点链表的头指针和尾指针,所述头指针用于指向空闲结点链表上首个空闲内存结点,所述尾指针用于指向空闲结点链表上末个空闲内存结点;
第二指针存储单元,用于存储链指针,所述链指针用于链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接的两个相邻的空闲内存结点中位置在后的空闲内存结点;
分配单元,用于在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关指针信息维护删除该分配的空闲内存结点之后的空闲结点链表;和/或,回收单元,用于在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息维护增加该回收的内存结点之后的空闲结点链表。
本申请提供的内存管理方法及装置,使用定义的三种指针能够将若干空闲内存结点链接成空闲结点链表,通过更改相关指针信息便可以从空闲结点链表上获取空闲内存结点或者将回收的内存结点挂回到空闲结点链表上,也就是说通过动态的维护一个空闲结点链表即可实现内存管理,每分配或者回收一个内存结点通过操作空闲结点链表的相关指针即可,有效提升了内存管理效率,且程序设计简单,易于实现。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例中内存管理方法流程图;
图2为本申请实施例中初始状态下整个内存状态示意图;
图3为本申请实施例中当申请几个内存结点使用后,整个内存状态示意图;
图4为本申请实施例中当回收一个内存结点后,段整个内存状态示意图;
图5为本申请实施例中持续分配内存直到整个内存空间即将使用结束,并且又回收了一个内存结点,整个内存状态示意图;
图6为本申请实施例中整个内存空间都使用过一次之后,整个内存状态示意图;
图7为本申请实施例中在图6基础上又回收了一个内存结点,然后又分配了一个空闲内存结点之后,整个内存状态示意图;
图8为本申请实施例中内存管理装置框图。
具体实施方式
以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
本申请实施例提供了一种高效的内存管理方法,通过动态地维护一个由空闲内存结点链接而成的空闲结点链表实现内存管理。本申请实施例这里定义了三种指针以维护空闲结点链表,其中:
使用头指针指向空闲结点链表上首个空闲内存结点,即头指针信息表示空闲结点链表上首个空闲内存结点的地址偏移;
使用尾指针指向空闲结点链表上末个空闲内存结点,即尾指针信息表示空闲结点链表上末个空闲内存结点的地址偏移;
使用链指针链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接的两个相邻的空闲内存结点中位置在后的空闲内存结点,即链指针信息表示其链接的两个相邻的空闲内存结点中,位置在后的空闲内存结点的地址偏移;可以理解,链指针的数量是随着空闲结点链表上空闲内存结点的数量而动态变化的,如果空闲结点链表上空闲内存结点的数量为T,相应的链指针的数量为T-1。
通过定义的三种指针能够将若干零散的空闲内存结点链接成一个完整的空闲结点链表,而内存管理就是通过不断的修改指针信息(包括头指针信息、尾指针信息和链指针信息)从空闲结点链表上获取空闲内存结点或者将回收的内存结点挂回到空闲结点链表上实现。
基于维护的空闲结点链表,所述内存管理方法,如图1所示,包括:
S101、在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关指针信息,维护删除该分配的空闲内存结点之后的空闲结点链表;
在分配内存时,具体可以包括如下方式:
从空闲结点链表上获取当前的首个空闲内存结点进行分配,修改头指针指向当前的第二个空闲内存结点,删除所述首个空闲内存结点和第二个空闲内存结点之间的链指针;或者,
从空闲结点链表上获取当前的末个空闲内存结点进行分配,删除指向所述末个空闲内存节点的链指针,并修改尾指针指向当前的倒数第二个空闲内存结点;或者,
从空闲结点链表上获取当前的首个和末个之外的一个空闲内存结点进行分配,删除指向所述首个和末个之外的一个空闲内存节点的链指针。
S102、在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息,维护增加该回收的内存结点之后的空闲结点链表;
在回收内存时,具体可以包括如下方式:
将回收的内存结点挂回到空闲结点链表的头部,增加指向当前的首个空闲内存结点的链指针,使用所述增加的链指针链接所述回收的内存结点和首个空闲内存结点,并修改头指针指向所述回收的内存结点;或者,
将回收的内存结点挂回到空闲结点链表的尾部,增加指向所述回收的内存节点的链指针,使用所述增加的链指针链接当前的末个空闲内存结点和所述回收的内存结点,并修改尾指针指向所述回收的内存结点;或者,
将回收的内存结点挂回到空闲结点链表的头部和尾部之间,增加指向所述回收的内存节点的链指针,使用所述增加的链指针链接回收的内存结点所在位置的上一空闲内存结点和所述回收的内存结点。
需要说明的是,基于维护的空闲结点链表所提出的内存管理方法,也可以在分配内存或者回收内存时独立使用。
本申请实施例提供的内存管理方法,使用定义的三种指针能够将若干空闲内存结点链接成空闲结点链表,通过修改指针信息便可以从空闲结点链表上获取空闲内存结点或者将回收的内存结点挂回到空闲结点链表上,也就是说通过动态的维护一个空闲结点链表即可实现内存管理,每分配或者回收一个内存结点通过操作空闲结点链表的相关指针即可,有效提升了内存管理效率,且程序设计简单,易于实现。
本发明人在发明过程中发现,现有的内存管理方案,使用两个链表实现内存分配和回收,在分配内存时,从空闲结点链表上取下一个空闲内存结点使用,并将该取下的空闲结点放置到已分配结点链表上;在回收内存时,将已回收的内存结点从已分配结点链表上取下,放置到空闲结点链表上,导致分配和回收内存无法同时进行,属于互斥操作。针对该问题,本申请实施例提供的内存管理方法进一步提出,分配内存在空闲结点链表的一端进行,而回收内存在空闲结点链表的另一端进行,使得对空闲结点链表的分配和回收可以同步进行,不存在互斥操作。例如,分配内存在空闲结点链表的头部进行,而回收内存在空闲结点链表的尾部进行;或者分配内存在空闲结点链表的尾部进行,而回收内存在空闲结点链表的头部进行。具体实施中,分配和回收内存可以采取如下方案:
方案一、
在分配内存时,从空闲结点链表上获取当前的首个空闲内存结点进行分配,修改头指针指向当前的第二个空闲内存结点,删除所述首个空闲内存结点和第二个空闲内存结点之间的链指针;以及
在回收内存时,将回收的内存结点挂回到空闲结点链表的尾部,增加指向所述回收的内存节点的链指针,使用所述增加的链指针链接当前的末个空闲内存结点和所述回收的内存结点,并修改尾指针指向所述回收的内存结点。
方案二、
在分配内存时,从空闲结点链表上获取当前的末个空闲内存结点进行分配,删除指向所述末个空闲内存节点的链指针,并修改尾指针指向当前的倒数第二个空闲内存结点;以及
在回收内存时,将回收的内存结点挂回到空闲结点链表的头部,增加指向当前的首个空闲内存结点的链指针,使用所述增加的链指针链接所述回收的内存结点和首个空闲内存结点,并修改头指针指向所述回收的内存结点。
本发明人在发明过程中发现,现有的内存管理方案,两个链表的链指针都使用额外的内存空间进行存储,随着内存结点数量的增加,每个内存结点都需要损耗额外的内存空间用于存储链指针,以维持两个链表,导致内存损耗较大。针对该问题,本申请实施例提供的内存管理方法进一步提出,链指针无需使用额外的内存空间,而是使用空闲内存结点所占用的内存空间存储链指针,即每一个链指针分别存储在其链接的两个相邻的空闲内存结点中位置在前的空闲内存结点所占用的内存空间中。当分配该位置在前的空闲内存结点时,链指针所占用的内存空间仍然可以使用,因此节约了内存空间。较佳的,可以使用空闲内存结点所占用内存空间的尾部空间存储链指针,例如使用空闲内存结点所占用内存空间的最后P个字节(例如P=4)存储链指针。
以下将结合说明书附图举例说明本申请实施例提供的内存管理过程,需要说明的是,为了便于内存的循环使用,内存块一般为固定大小(例如N字节),也就是说,一般情况下各内存结点占用的内存空间大小是相同的。将整个内存分为固定大小的若干内存块,并在回收过程中将回收的内存块即内存结点链接成一条空闲结点链表,供再次分配时使用;同时在整个内存中预留固定大小的内存空间用于保存头信息,头信息包括空闲结点链表的头指针和尾指针,较佳地,还可以包括空闲内存空间大小。预留的固定大小的内存空间一般位于整个内存的头部空间。
其中,头信息定义如下:
内存管理过程分为以下几个阶段:
(1)初始状态,此时头信息作初始化,其余部分为空闲内存空间。
(2)顺序分配空闲内存结点使用,但还未用完整个内存空间,即FirstFreeNode还未达到整个内存空间的尾部。
(3)回收已分配内存结点,此时LastFreeNode指向最后回收的内存结点,FirstFreeNode还未达到整个内存空间的尾部。
(4)分配空闲内存结点直到FirstFreeNode达到整个内存空间的尾部,此时表示整个内存空间都被使用过了,则整个内存被分为了若干内存结点(内存块),其中空闲内存结点被链接起来形成空闲结点链表。
(5)继续申请内存结点,需要从空闲结点链表上获取空闲内存结点使用,如果FreeSize=0,则表示整个内存空间已经用尽。
假设整个内存大小为M字节,一个内存结点大小为N字节,头信息大小为H字节,内存管理过程详述如下:
(1)初始状态下,整个内存状态示意图请参见图2。头信息如下:
FreeSize=M-H
FirstFreeNode=H(即除去头信息后的开始位置)
LastFreeNode=M(即整个内存空间的尾部)
(2)当申请几个(比如3个)内存结点(内存块)使用后,整个内存状态示意图请参见图3。头信息如下:
FreeSize=M-H-3*N
FirstFreeNode=H+3*N
LastFreeNode=M
(3)当回收一个内存结点后,整个内存状态示意图请参见图4。头信息如下:
FreeSize=M-H-2*N
FirstFreeNode=H+3*N
LastFreeNode=H+N
同时,整个内存的尾部空间使用一个链指针指示该回收的内存结点(此时为空闲内存结点)的地址偏移,即ptr1=H+N。
(4)持续分配内存直到整个内存空间即将使用结束(还剩最后一个未使用的内存结点),并且又回收了一个内存结点,整个内存状态示意图请参见图5。头信息如下:
FreeSize=M-H-5*N
FirstFreeNode=H+7*N
LastFreeNode=H+3*N
同时,整个内存的尾部空间使用一个链指针指示第一个回收的空闲内存结点的地址偏移,即ptr1=H+N,而第一个回收的空闲内存结点的尾部空间使用一个链指针指示又回收的下一个空闲内存结点的地址偏移,即Ptr2=H+3*N。
(5)整个内存空间都使用过一次,此时整个内存被分为多个相同大小的内存块,其中空闲内存结点链接成空闲结点链表。整个内存状态示意图请参见图6,所有内存结点中有五个内存结点被分配,3个内存结点被回收。头信息如下:
FreeSize=M-H-5*N
FirstFreeNode=H+N
LastFreeNode=H+5*N
同时,3个空闲内存结点按照回收的顺序,由存储在每两个相邻的空闲内存结点中位置在前的空闲内存结点的尾部空间的链指针链接起来,即此时ptr1=H+3*N,Ptr2=H+5*N。
(6)之后再有内存分配和回收,则直接修改空闲结点链表的头指针和尾指针,同时维护空闲内存结点之间的链指针。较佳的,可以将回收的内存结点挂回到空闲结点链表的尾部,分配的空闲内存结点从空闲结点链表的头部获取。如图7所示,是在步骤(5)之后又回收了一个内存结点,然后又分配了一个空闲内存结点之后的整个内存状态示意图。头信息如下:
FreeSize=M-H-5*N
FirstFreeNode=H+3*N
LastFreeNode=H+6*N
空闲内存结点之间的链指针为Ptr1=H+5*N,Ptr2=H+6*N。
基于同一技术构思,本申请实施例还提供了一种内存管理装置,供应用程序在运行过程中,分配和回收内存时使用,由于该内存管理装置解决问题的原理与内存管理方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
如图8所示,本申请实施例提供的内存管理装置的一种可能结构,可以包括:
第一指针存储单元801,用于存储由空闲内存结点链接而成的空闲结点链表的头指针和尾指针,所述头指针用于指向空闲结点链表上首个空闲内存结点,所述尾指针用于指向空闲结点链表上末个空闲内存结点;
第二指针存储单元802,用于存储链指针,所述链指针用于链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接的两个相邻的空闲内存结点中位置在后的空闲内存结点;
分配单元803,用于在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关指针信息维护删除该分配的空闲内存结点之后的空闲结点链表;
回收单元804,用于在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息维护增加该回收的内存结点之后的空闲结点链表。
本申请实施例提供的内存管理装置,可以同时包括分配单元803和回收单元804,也可以仅包括分配单元803和回收单元804中的一个。
其中,分配单元803,具体可以包括:
第一分配子单元,用于在分配内存时,从空闲结点链表上获取当前的首个空闲内存结点进行分配,修改头指针指向当前的第二个空闲内存结点,删除所述首个空闲内存结点和第二个空闲内存结点之间的链指针;或者,
第二分配子单元,用于在分配内存时,从空闲结点链表上获取当前的末个空闲内存结点进行分配,删除指向所述末个空闲内存节点的链指针,并修改尾指针指向当前的倒数第二个空闲内存结点;或者,
第三分配子单元,用于在分配内存时,从空闲结点链表上获取当前的首个和末个之外的一个空闲内存结点进行分配,删除指向所述首个和末个之外的一个空闲内存节点的链指针。
其中,回收单元804,具体可以包括:
第一回收子单元,用于在回收内存时,将回收的内存结点挂回到空闲结点链表的头部,增加指向当前的首个空闲内存结点的链指针,使用所述增加的链指针链接所述回收的内存结点和首个空闲内存结点,并修改头指针指向所述回收的内存结点;或者,
第二回收子单元,用于在回收内存时,将回收的内存结点挂回到空闲结点链表的尾部,增加指向所述回收的内存节点的链指针,使用所述增加的链指针链接当前的末个空闲内存结点和所述回收的内存结点,并修改尾指针指向所述回收的内存结点;或者,
第三回收子单元,用于在回收内存时,将回收的内存结点挂回到空闲结点链表的头部和尾部之间,增加指向所述回收的内存节点的链指针,使用所述增加的链指针链接回收的内存结点所在位置的上一空闲内存结点和所述回收的内存结点。
为了使得对空闲结点链表的分配和回收可以同步进行,达到不存在互斥操作的目的,一个较佳的内存管理装置中,除了包括第一指针存储单元801和第二指针存储单元802之外,可以同时包括第一分配子单元和第二回收子单元;另一个较佳的内存管理装置中,除了包括第一指针存储单元801和第二指针存储单元802之外,可以同时包括第二分配子单元和第一回收子单元。
具体实施中,第二指针存储单元802可以包括若干用于存储单个链指针的存储子单元,每一个存储子单元分别设置在其链指针所链接的两个相邻的空闲内存结点中,位置在前的空闲内存结点所占用的内存空间中。
较佳的,每一个存储子单元可以分别设置在所述在前空闲内存结点所占用内存空间的尾部空间中。
其中,第一指针存储单元801一般设置在预留的固定大小的内存空间中,例如可以位于整个内存的头部空间中,第一指针存储单元801还用于存储空闲结点链表的空闲内存空间大小。
本领域的技术人员应明白,本申请的实施例可提供为方法、装置、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种内存管理方法,其特征在于,维护一个由空闲内存结点链接而成的空闲结点链表,使用头指针指向空闲结点链表上首个空闲内存结点,使用尾指针指向空闲结点链表上末个空闲内存结点,使用链指针链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接的两个相邻的空闲内存结点中位置在后的空闲内存结点,所述方法包括:
在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关指针信息维护删除该分配的空闲内存结点之后的空闲结点链表;和/或,
在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息维护增加该回收的内存结点之后的空闲结点链表。
2.如权利要求1所述的方法,其特征在于,在分配内存时,具体包括:
从空闲结点链表上获取当前的首个空闲内存结点进行分配,修改头指针指向当前的第二个空闲内存结点,删除所述首个空闲内存结点和第二个空闲内存结点之间的链指针;或者,
从空闲结点链表上获取当前的末个空闲内存结点进行分配,删除指向所述末个空闲内存节点的链指针,并修改尾指针指向当前的倒数第二个空闲内存结点;或者,
从空闲结点链表上获取当前的首个和末个之外的一个空闲内存结点进行分配,删除指向所述首个和末个之外的一个空闲内存节点的链指针。
3.如权利要求1或2所述的方法,其特征在于,在回收内存时,具体包括:
将回收的内存结点挂回到空闲结点链表的头部,增加指向当前的首个空闲内存结点的链指针,使用所述增加的链指针链接所述回收的内存结点和首个空闲内存结点,并修改头指针指向所述回收的内存结点;或者,
将回收的内存结点挂回到空闲结点链表的尾部,增加指向所述回收的内存节点的链指针,使用所述增加的链指针链接当前的末个空闲内存结点和所述回收的内存结点,并修改尾指针指向所述回收的内存结点;或者,
将回收的内存结点挂回到空闲结点链表的头部和尾部之间,增加指向所述回收的内存节点的链指针,使用所述增加的链指针链接回收的内存结点所在位置的上一空闲内存结点和所述回收的内存结点。
4.如权利要求1所述的方法,其特征在于,
在分配内存时,从空闲结点链表上获取当前的首个空闲内存结点进行分配,修改头指针指向当前的第二个空闲内存结点,删除所述首个空闲内存结点和第二个空闲内存结点之间的链指针;以及
在回收内存时,将回收的内存结点挂回到空闲结点链表的尾部,增加指向所述回收的内存节点的链指针,使用所述增加的链指针链接当前的末个空闲内存结点和所述回收的内存结点,并修改尾指针指向所述回收的内存结点。
5.如权利要求1所述的方法,其特征在于,
在分配内存时,从空闲结点链表上获取当前的末个空闲内存结点进行分配,删除指向所述末个空闲内存节点的链指针,并修改尾指针指向当前的倒数第二个空闲内存结点;以及
在回收内存时,将回收的内存结点挂回到空闲结点链表的头部,增加指向当前的首个空闲内存结点的链指针,使用所述增加的链指针链接所述回收的内存结点和首个空闲内存结点,并修改头指针指向所述回收的内存结点。
6.如权利要求1所述的方法,其特征在于,每一个链指针分别存储在其链接的两个相邻的空闲内存结点中位置在前的空闲内存结点所占用的内存空间中。
7.如权利要求1或6所述的方法,其特征在于,所述头指针和尾指针存储在预留的固定大小的内存空间中,以及所述预留的固定大小的内存空间中还存储空闲结点链表的空闲内存空间大小。
8.一种内存管理装置,其特征在于,包括:
第一指针存储单元,用于存储由空闲内存结点链接而成的空闲结点链表的头指针和尾指针,所述头指针用于指向空闲结点链表上首个空闲内存结点,所述尾指针用于指向空闲结点链表上末个空闲内存结点;
第二指针存储单元,用于存储链指针,所述链指针用于链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接的两个相邻的空闲内存结点中位置在后的空闲内存结点;
分配单元,用于在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关指针信息维护删除该分配的空闲内存结点之后的空闲结点链表;和/或,回收单元,用于在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息维护增加该回收的内存结点之后的空闲结点链表。
9.如权利要求8所述的装置,其特征在于,所述分配单元,具体包括:
第一分配子单元,用于在分配内存时,从空闲结点链表上获取当前的首个空闲内存结点进行分配,修改头指针指向当前的第二个空闲内存结点,删除所述首个空闲内存结点和第二个空闲内存结点之间的链指针;或者,
第二分配子单元,用于在分配内存时,从空闲结点链表上获取当前的末个空闲内存结点进行分配,删除指向所述末个空闲内存节点的链指针,并修改尾指针指向当前的倒数第二个空闲内存结点;或者,
第三分配子单元,用于在分配内存时,从空闲结点链表上获取当前的首个和末个之外的一个空闲内存结点进行分配,删除指向所述首个和末个之外的一个空闲内存节点的链指针。
10.如权利要求8或9所述的装置,其特征在于,所述回收单元,具体包括:
第一回收子单元,用于在回收内存时,将回收的内存结点挂回到空闲结点链表的头部,增加指向当前的首个空闲内存结点的链指针,使用所述增加的链指针链接所述回收的内存结点和首个空闲内存结点,并修改头指针指向所述回收的内存结点;或者,
第二回收子单元,用于在回收内存时,将回收的内存结点挂回到空闲结点链表的尾部,增加指向所述回收的内存节点的链指针,使用所述增加的链指针链接当前的末个空闲内存结点和所述回收的内存结点,并修改尾指针指向所述回收的内存结点;或者,
第三回收子单元,用于在回收内存时,将回收的内存结点挂回到空闲结点链表的头部和尾部之间,增加指向所述回收的内存节点的链指针,使用所述增加的链指针链接回收的内存结点所在位置的上一空闲内存结点和所述回收的内存结点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011102739989A CN102999434A (zh) | 2011-09-15 | 2011-09-15 | 一种内存管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011102739989A CN102999434A (zh) | 2011-09-15 | 2011-09-15 | 一种内存管理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102999434A true CN102999434A (zh) | 2013-03-27 |
Family
ID=47928027
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011102739989A Pending CN102999434A (zh) | 2011-09-15 | 2011-09-15 | 一种内存管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102999434A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942155A (zh) * | 2014-04-29 | 2014-07-23 | 中国科学院微电子研究所 | 一种内存块控制方法及装置 |
WO2016011811A1 (zh) * | 2014-07-21 | 2016-01-28 | 深圳市中兴微电子技术有限公司 | 一种内存管理方法、装置及存储介质 |
CN106095908A (zh) * | 2016-06-08 | 2016-11-09 | 北京金山安全管理系统技术有限公司 | 用于关联进程和连接的方法和装置 |
CN106201910A (zh) * | 2016-08-27 | 2016-12-07 | 浪潮(北京)电子信息产业有限公司 | 一种小块内存的管理方法和装置 |
CN106681829A (zh) * | 2016-12-09 | 2017-05-17 | 上海斐讯数据通信技术有限公司 | 一种内存管理方法及系统 |
CN107133182A (zh) * | 2016-02-29 | 2017-09-05 | 北大方正集团有限公司 | 一种内存管理方法及装置 |
CN112328389A (zh) * | 2020-10-12 | 2021-02-05 | 长沙新弘软件有限公司 | 一种用于二叉树添加和删除结点的内存分配方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002149454A (ja) * | 2000-08-30 | 2002-05-24 | Internatl Business Mach Corp <Ibm> | 論理ディスク上でのトランザクション・サポート |
CN1532708A (zh) * | 2003-03-19 | 2004-09-29 | 华为技术有限公司 | 一种静态内存管理方法 |
CN1731358A (zh) * | 2005-08-18 | 2006-02-08 | 上海交通大学 | 减轻片上系统软件负载的方法 |
CN101009645A (zh) * | 2006-12-22 | 2007-08-01 | 清华大学 | 基于cam的宽带网络业务流按每流排队的可扩展的装置 |
CN101122885A (zh) * | 2007-09-11 | 2008-02-13 | 腾讯科技(深圳)有限公司 | 一种数据缓存处理方法、系统及数据缓存装置 |
CN101594299A (zh) * | 2009-05-20 | 2009-12-02 | 清华大学 | 基于链表的交换网络中队列缓冲管理方法 |
CN101605100A (zh) * | 2009-07-15 | 2009-12-16 | 华为技术有限公司 | 队列存储空间的管理方法和设备 |
CN102063385A (zh) * | 2010-12-23 | 2011-05-18 | 深圳市金宏威实业发展有限公司 | 一种内存管理方法和系统 |
-
2011
- 2011-09-15 CN CN2011102739989A patent/CN102999434A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002149454A (ja) * | 2000-08-30 | 2002-05-24 | Internatl Business Mach Corp <Ibm> | 論理ディスク上でのトランザクション・サポート |
CN1532708A (zh) * | 2003-03-19 | 2004-09-29 | 华为技术有限公司 | 一种静态内存管理方法 |
CN1731358A (zh) * | 2005-08-18 | 2006-02-08 | 上海交通大学 | 减轻片上系统软件负载的方法 |
CN101009645A (zh) * | 2006-12-22 | 2007-08-01 | 清华大学 | 基于cam的宽带网络业务流按每流排队的可扩展的装置 |
CN101122885A (zh) * | 2007-09-11 | 2008-02-13 | 腾讯科技(深圳)有限公司 | 一种数据缓存处理方法、系统及数据缓存装置 |
CN101594299A (zh) * | 2009-05-20 | 2009-12-02 | 清华大学 | 基于链表的交换网络中队列缓冲管理方法 |
CN101605100A (zh) * | 2009-07-15 | 2009-12-16 | 华为技术有限公司 | 队列存储空间的管理方法和设备 |
CN102063385A (zh) * | 2010-12-23 | 2011-05-18 | 深圳市金宏威实业发展有限公司 | 一种内存管理方法和系统 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942155A (zh) * | 2014-04-29 | 2014-07-23 | 中国科学院微电子研究所 | 一种内存块控制方法及装置 |
CN103942155B (zh) * | 2014-04-29 | 2017-01-11 | 中国科学院微电子研究所 | 一种内存块控制方法及装置 |
WO2016011811A1 (zh) * | 2014-07-21 | 2016-01-28 | 深圳市中兴微电子技术有限公司 | 一种内存管理方法、装置及存储介质 |
CN105302739A (zh) * | 2014-07-21 | 2016-02-03 | 深圳市中兴微电子技术有限公司 | 一种内存管理方法和装置 |
CN107133182A (zh) * | 2016-02-29 | 2017-09-05 | 北大方正集团有限公司 | 一种内存管理方法及装置 |
CN106095908A (zh) * | 2016-06-08 | 2016-11-09 | 北京金山安全管理系统技术有限公司 | 用于关联进程和连接的方法和装置 |
CN106095908B (zh) * | 2016-06-08 | 2019-07-05 | 北京金山安全管理系统技术有限公司 | 用于关联进程和连接的方法和装置 |
CN106201910A (zh) * | 2016-08-27 | 2016-12-07 | 浪潮(北京)电子信息产业有限公司 | 一种小块内存的管理方法和装置 |
CN106681829A (zh) * | 2016-12-09 | 2017-05-17 | 上海斐讯数据通信技术有限公司 | 一种内存管理方法及系统 |
CN106681829B (zh) * | 2016-12-09 | 2020-07-24 | 北京康吉森技术有限公司 | 一种内存管理方法及系统 |
CN112328389A (zh) * | 2020-10-12 | 2021-02-05 | 长沙新弘软件有限公司 | 一种用于二叉树添加和删除结点的内存分配方法 |
CN112328389B (zh) * | 2020-10-12 | 2024-04-30 | 长沙新弘软件有限公司 | 一种用于二叉树添加和删除结点的内存分配方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102999434A (zh) | 一种内存管理方法及装置 | |
CN101320351A (zh) | 内存的分配、清理和释放方法及内存管理的装置 | |
US9396030B2 (en) | Quota-based adaptive resource balancing in a scalable heap allocator for multithreaded applications | |
CN104731799B (zh) | 内存数据库管理装置 | |
CN103365788B (zh) | 实时闪存转换层使用的自适应局部垃圾回收方法 | |
CN102377682B (zh) | 基于定长单元存储变长分组的队列管理方法及设备 | |
CN102253897B (zh) | 一种内存池管理方法及装置 | |
CN103309818B (zh) | 存储数据的方法及装置 | |
CN103914265A (zh) | 集群细粒度内存管理方法 | |
TWI738037B (zh) | 分區分裂方法、裝置、電子設備及可讀儲存媒體 | |
CN101692252B (zh) | 文件空闲块的分配和回收方法 | |
CN101984417A (zh) | 内存管理方法及装置 | |
JP2007523412A (ja) | メモリ割当て | |
CN102968378B (zh) | 一种内存分配和释放的方法、装置及系统 | |
CN102103497A (zh) | 有限状态机执行装置和方法、在应用中的建立和使用方法 | |
CN103455433A (zh) | 内存管理方法及系统 | |
CN104965686B (zh) | 一种优先级队列设计方法及优先级队列设计装置 | |
US10114866B2 (en) | Memory-constrained aggregation using intra-operator pipelining | |
CN102567107A (zh) | 高并行的实时内存资源管理调度方法 | |
CN105302739A (zh) | 一种内存管理方法和装置 | |
CN103412825A (zh) | 一种内存释放方法及装置 | |
CN111177017B (zh) | 一种内存分配方法及装置 | |
CN103699497A (zh) | 一种缓存分配方法及装置 | |
CN105718319B (zh) | 一种内存池版图解析方法和内存池装置 | |
CN106557427A (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1179011 Country of ref document: HK |
|
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20130327 |
|
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1179011 Country of ref document: HK |