CN100382048C - 一种内存管理方法 - Google Patents

一种内存管理方法 Download PDF

Info

Publication number
CN100382048C
CN100382048C CNB2005101176717A CN200510117671A CN100382048C CN 100382048 C CN100382048 C CN 100382048C CN B2005101176717 A CNB2005101176717 A CN B2005101176717A CN 200510117671 A CN200510117671 A CN 200510117671A CN 100382048 C CN100382048 C CN 100382048C
Authority
CN
China
Prior art keywords
memory block
free memory
piece group
free
size
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.)
Expired - Fee Related
Application number
CNB2005101176717A
Other languages
English (en)
Other versions
CN1963788A (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.)
ZTE Corp
Original Assignee
ZTE Corp
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 ZTE Corp filed Critical ZTE Corp
Priority to CNB2005101176717A priority Critical patent/CN100382048C/zh
Publication of CN1963788A publication Critical patent/CN1963788A/zh
Application granted granted Critical
Publication of CN100382048C publication Critical patent/CN100382048C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种内存管理方法,先设定一个空闲内存块的最小单元,并定义多个块组,每个块组可包括多个大小不同的空闲内存块;使用时,维护每个块组当前所包括的所有空闲内存块的信息及每个内存块的大小和使用情况信息;收到内存分配请求后,确定能满足该请求的最小空闲内存块,然后在可能具有满足该请求的空闲内存块的块组中寻找一个可满足该请求的空闲内存块,如找到的空闲内存块大小等于该最小空闲内存块,则直接将其分配给用户并更新相关信息,否则将其拆分为最小空闲内存块和剩余部分构成的内存块,将最小空闲内存块分配给用户,并更新该两个内存块的信息及其所属块组的空闲内存块的信息。本发明方法能够有效地提高内存的使用效率。

Description

一种内存管理方法
技术领域
本发明涉及一种内存管理方法,尤其涉及一种数据通信设备中的内存管理方法。
背景技术
数据通信设备支持的业务种类非常众多,而各种业务种类的数据结构内存特征大小各不相同。为了满足各种内存特征大小的申请、释放操作,通常使用一种经典的内存管理方法-伙伴算法。
该算法将空闲内存分为多个块组,每组中块的大小为2的幂次方字节,比如第0组中块的大小都为32字节,第1组中块的大小都为64字节,第n组中块的大小都为32*2^n字节。也就是说,每一组中块的大小都相同且这些相同大小的块形成一个链表。当申请65字节内存时,该算法先从128字节的块组的空闲链表中寻找,看是否存在空闲块。如果有就直接分配;如果没有就继续查找下一个更大的块。具体地说,就是在256字节的块组的空闲链表中寻找,如果存在这样的空闲块,将该空闲块分为两等份,一份分配出去,另一份插入到128字节块组的空闲链中。如果256字节的块组也没有空闲块,则继续找更大的块组,即512字节的块组。如果存在空闲块,则将512字节分配出128字节,剩余384字节分为256字节插入256字节块组和128字节插入128字节块组。以此类推。如果最大块组还没有空闲块则放弃分配。内存释放是上述过程的逆过程,即两块大小相等、物理地址连续的内存可以进行合并,合并后的内存还可以与相邻块合并时则继续合并。
这种内存管理方法可以满足各种内存特征大小的申请和释放,但是存在内存使用效率不足的缺点,根据算法原理,平均情形内存使用效率只有75%,如果某些关键数据结构内存特征大小处于特殊值比如65时,内存使用效率就下降到只有50%多一点了。
发明内容
本发明要解决的技术问题是提出一种内存管理方法,该方法能够有效地提高内存的使用效率。
为了解决上述技术问题,本发明提供了一种内存管理方法,包括下述步骤:
(a)设定一个最小单元,使空闲内存块的大小均为该最小单元p倍,p为正整数,同时定义多个块组,每个块组对应于一个用内存大小标识的区间且各区间互不重叠,每个块组可包括多个大小不同的空闲内存块;
(b)使用时,将内存划分为一个或多个空闲内存块,在内存中维护每个块组当前所包括的空闲内存块的信息,以及每个内存块的大小和使用情况的信息;
(c)内存管理模块收到内存分配请求后,确定能满足该请求的最小空闲内存块的大小,然后从那些可能具有该最小空闲内存块或更大空闲内存块的块组中寻找一个能满足该请求的空闲内存块进行分配,如找到,执行下一步,否则,此次申请失败,结束;
(d)如果找到的空闲内存块即为所述最小空闲内存块,执行步骤(e),否则,其大小要大于所述最小空闲内存块的大小,执行步骤(f);
(e)将找到的空闲内存块的可用区间分配给用户使用,更新该内存块的信息以及其所属块组的空闲内存块的信息,此次申请成功,结束;
(f)将找到的空闲内存块拆分为最小空闲内存块和余下部分构成的空闲内存块,将最小空闲内存块的可用区间分配给用户使用,并更新该两个内存块的信息及其所属块组的空闲内存块的信息,此次申请成功,结束。
进一步地,上述内存管理方法还可具有以下特点:还包括以下释放内存和合并空闲内存块的步骤:
(h)内存管理模块收到释放内存请求,根据请求中的参数找到待处理的内存块;
(i)判断与所述待处理的内存块相邻的前一个和后一个内存块是否为空闲内存块,如果是,执行下一步,否则,执行步骤(k);
(j)将所述待处理的内存块与其相邻的前一个和/或后一个空闲内存块合并,将该合并的空闲内存块作为新的待处理内存块,更新被合并的空闲内存块所属块组的空闲内存块的信息;
(k)更新所述待处理内存块的信息及其所属块组的空闲内存块的信息,结束。
进一步地,上述内存管理方法还可具有以下特点:所述步骤(c)中,所述内存管理模块在查找能满足所述内存分配请求的空闲内存块时,是从所述最小空闲内存块所属的块组或其下一个块组开始查找,如果在该块组中找不到,再向到其下一个块组去查找,如此依次查找。
进一步地,上述内存管理方法还可具有以下特点:所述步骤(a)定义块组的区间时,使各个块组对应的内存大小的区间合在一起覆盖了用户可能申请使用的内存大小。
进一步地,上述内存管理方法还可具有以下特点:所述步骤(a)按以下方式定义块组的区间:第n个块组对应区间内的内存大小为所述最小单元的2n倍到2(n+1)-1倍,n=0,1,2,……。
进一步地,上述内存管理方法还可具有以下特点:所述步骤(b)还事先建立p值与开始查找的块组的块组号的映射关系,在所述步骤(c)中可根据最小空闲内存块的p值直接确定开始查找的块组。
进一步地,上述内存管理方法还可具有以下特点:所述步骤(b)中,是为每个块组维护一个空闲内存块链表,链表中的节点指示了对应块组当前所包括的所有空闲内存块及其位置信息,且还为每个内存块建立了一个用于记录其信息的内存管理结构,该结构中至少包含该内存块的大小和使用标志的信息。
进一步地,上述内存管理方法还可具有以下特点:所述空闲内存块链表为双向链表,链表中每一个中间节点均保存了其前、后相邻节点的地址信息。
进一步地,上述内存管理方法还可具有以下特点:所述空闲内存块链表的第一个节点均建立在专用内存区,其第二个及以后的节点均建立在该节点所指示的空闲内存块中。
进一步地,上述内存管理方法还可具有以下特点:所述步骤(b)为每个内存块建立的内存管理结构设置在每个内存块内的起始位置,所述步骤(c)中收到大小为size的内存分配请求后,需要先将size加上该内存管理结构所需的大小作为待分配的最小内存大小,再确定能满足该请求的最小空闲内存块的大小,其中,size为大于等于1的正整数。
进一步地,上述内存管理方法还可具有以下特点:所述步骤(c)在确定了能满足该请求的最小空闲内存块的大小后,在该最小空闲内存块也是其所属块组中最小的空闲内存块时,查找其所属块组的空闲内存块链表,否则查找其所属块组的下一个块组的空闲内存块链表,从查找的链表中取出存在的第一个空闲内存块进行分配。
进一步地,上述内存管理方法还可具有以下特点:所述为每个内存块建立的内存管理结构中还包括地址相邻的前一个内存块的位置信息和/或是否存在地址相邻的后一内存块的标志信息。
进一步地,上述内存管理方法还可具有以下特点:当空闲内存块被分配给用户使用而更新其所属块组的空闲内存块的信息时,是将该块组的空闲内存块链表中对应于该空闲内存块的节点从该链表中删除,当因拆分、释放而有新的空闲内存块生成而更新该新的空闲内存块所属块组的空闲内存块的信息时,是在该块组的空闲内存块链表中加入用于指示该空闲内存块的节点。
与现有技术相比,本发明具有如下显著优点:
(1)本发明极大地改进了伙伴算法内存使用效率低的缺点,并且使得内存使用效率与关键数据结构内存特征大小关系较小:采用接近用户所需大小进行内存的分配,每次内存分配的浪费在最坏情形下也只是接近一个最小内存块,只要申请内存的平均值比最小内存块大很多,则即使在最坏情形下的内存使用效率也能大大超过伙伴算法的平均内存使用效率;
(2)本发明所述的内存管理方法的内存申请无需伙伴算法的多次分片,内存释放无需伙伴算法的多次合并,在效率上也得到了进一步的改进。
附图说明
图1为本发明实施例块组和空闲内存块的构造及逻辑关系示意图;
图2为本发明实施例块组、空闲内存块、已分配内存块基本数据结构示意图;
图3为本发明实施例内存分配的流程图;
图4为本发明实施例内存释放的流程图
具体实施方式
下面结合附图和具体实施例对本发明作进一步的介绍,但不作为对本发明的限定。
在本实施例中,首先确定一个空闲内存块的最小单元,空闲内存块的大小均为该最小单元p倍,p为正整数。同时,定义多个块组,每个块组对应于一个用内存大小标识的区间,不同块组的区间互不重叠,使得这些块组的内存大小区间合在一起可以覆盖用户可能申请使用的内存大小,这样申请内存时总可以找到相应的块组。每个块组可以包括多个大小不等但在该块组区间内的内存块,反之,每个内存块按其大小归属于一个块组。
参考图1,块1表示大小为确定的最小单元的空闲内存块,块2表示大小为最小单元2倍的空闲内存块,以此类推......。根据空闲内存块的大小所属的区间将其归属到该区间对应的块组中。本实施例中,第0个块组中空闲内存块的大小都是最小单元,第1个块组中空闲内存块的大小是最小单元的2倍或3倍,第2个块组中空闲内存块的大小都为最小单元的4倍、5倍、6倍或7倍,......第n个块组中空闲内存块的大小都为最小单元的2n倍到2(n+1)-1倍,n可以根据用户的实际需求确定,应注意的是,这里的区间也可以采用其它的划分方式。
图2是本实施例块组、空闲内存块和已分配内存块基本数据结构示意图。本实施例在用户可用内存中的每个内存块的起始位置设置了一个内存管理结构,用于记录该内存块的大小(size=最小单元的倍数)、地址相邻的前一个内存块的位置(prev_nbr_addr)(指起始地址)、是否存在地址相邻的后一内存块的标志(have_next_nbr),以及本内存块是否使用的标志(used_flag)等信息。将这些信息直接存放在内存块的起始位置,就不必建立保存以上信息的映射表并在映射表和内存块之间来回跳转和在映射表中逐一查找,可以很方便地获取内存块的各种信息。实施例中所提的内存块的大小包括了其内存管理结构所占用的空间。
以上内存管理结构中的内容是可以变化的,例如,在另一实施例中,后一内存块标记可以不需要,直接根据地址可以判断出来。而前一个相邻内存块的地址只是在内存释放合并时才需要,仅仅内存申请或者采用定时合并方式是不需要的。
为了便于在用户内存的申请时快速找到需要的空闲内存块,本实施例方法为每个块组均维护一个双向的空闲内存块链表,用于指示该块组包含的所有空闲内存块及其位置信息。每个双向空闲链表由相互链接的一个或多个节点组成。如图2所示,本实施例将所有双向空闲内存链表的第一个节点集中设置在内存的一个专用区域,查询时可以从该区域中找到相应块组的第一个节点,该节点应保存有该链表对应的块组的标识。第一个节点后的所有节点直接设置在该节点所指示的空闲内存块中,其所在位置即该空闲内存块的位置,无需额外的指示信息。在每个节点上均包括第一指针和第二指针,第一指针为前一个节点的地址,第二指针为后一个节点的地址,第一个节点的第一指针和最后一个节点的第二指针设为空(NULL)。通过将节点设置在空闲内存块中,可以利用用户内存空间完成双向链表的构建,因而有效地节约了内存空间。
如图2所示,为块组mm_unit[1](即第一个块组)维护了一个双向空闲内存块链表,用于指示该块组中包含的大小为最小单元2倍或3倍的空闲内存块,图中该链表包括3个节点。类似地,要为块组mm_unit[n]维护一个双向空闲链表,用于指示该块组中包含的大小为最小单元2n倍或2n+1倍、....、2(n+1)-1倍的空闲内存块。
双向链表的设置使得可以很方便地从链表中删除一个节点,当要删除一个空闲内存块对应的节点N时,只要根据该空闲内存块中保存的节点N的第一和第二指针找到其前后节点,并将其前一个节点的第二指针修改为节点N的第二指针,将其后一个节点的第一指针修改为节点N的第一指针就可以了,无需从头访问链表。在链表中增加一个节点时,在本实施方式中是插入到原链表的第一个节点之后。但在另一实施例中,也可以接在原链表最后一个节点上。
图3为本发明实施例内存分配方法的流程图,其中的操作都是由内存管理模块完成的,如图所示,该方法包括以下步骤:
步骤100,使用时,先将用户可用的空闲内存划分为多个空闲内存块,常用的是将可用的空闲内存划分为内存管理模块设定的最大空闲内存块,将这些最大空闲内存块链入最大块组的多向链表中,但也可以划分为属于不同块组的多个空闲块;
本实施例采用最小单元的1倍到2(n+1)-1倍这种方式来设置块组,内存管理模块只需要设置最小单元和n,根据具体的用户环境选择合适的值就可以要满足这个要求,对超过设置的最大空闲内存块大小的内存需求可以由内存管理模块先进行拆分。
另外,为了提高内存申请的效率,还事先建立p与大小为最小单元p倍的空闲内存块所属块组号的映射关系。
步骤101:内存管理模块收到大小为size内存分配请求后,将size加上内存管理结构所需的大小,得到待分配的最小内存大小;
本实施例中,由于内存管理结构是在用户内存决的内部,所以最终分配出的内存块中隐含了一个管理内存结构,在计算所需大小时要计入内存管理结构所需的大小。
步骤102:根据待分配的最小内存的大小,计算出能容纳该最小内存的空闲内存块大小应为最小单元的p1倍;
步骤103:根据事先设定的p与块组号的映射关系,找到相应的块组;
本实施例中,p并不一定是和大小为p倍最小单元的空闲内存块所属块组的块组号间建立映射,为了保证查找的块组中的空闲内存块都能大于或等于待分配的最小内存的大小,以简化流程。在映射时,如果p倍最小单元是某个块组的最小空闲内存块的大小,则在该p值与大小为p倍最小单元的空闲内存块所属块组的块组号间建立映射,而当p倍最小单元不是块组所包括的最小空闲内存块的大小时,则与该p值建立映射的块组号,其对应块组是大小为p倍最小单元的空闲内存块所属块组的下一个块组(文中所说的某一个块组A的“下一个”块组是指与块组A的区间相邻,且其包括的空闲内存块大于块组A包括的空闲内存块的块组)。
步骤104:查询该块组的双向空闲链表中是否存在空闲内存块,如果存在,则执行步骤105,如果不存在,则执行步骤110;
步骤105:从该空闲链表中取出其指示的第一个空闲内存块;
步骤106:判断该空闲内存块的大小是否大于p1倍的最小单元,如果是,则执行下一步骤107,如果不是,则执行步骤109;
步骤107:将空闲内存块拆分为两块,第一个内存块的内存大小为p1倍最小单元,修改该块内存管理结构中的相应内容为:内存大小size=p1,地址相邻的后一内存块的存在标记have_next_nbr=1,使用标记used_flag=1,地址相邻的前一个内存块的位置prev_nbr_addr=原值;剩余的第二个内存块的管理结构中的相应内容也相应更改为:内存大小size=原倍数-p1,地址相邻的前一个内存块的位置prev_nbr_addr=刚拆分的第一个内存块地址,地址相邻的后一内存块的存在标记have_next_nbr=原值,使用标记used_flag=0;
步骤108,根据分出的第二个内存块的内存大小定位到其所属的块组号,在该块组的双向空闲链表后加上用于指示该内存块的节点,并将分出的第一个内存块的用户区间分配给用户使用,从双向链表中删除该内存块对应的节点,本次申请成功,结束;
步骤109:将该空闲内存块的用户区间分配给用户使用,并从双向链表中删除该内存块对应的节点,本次申请成功,结束;
步骤110:判断是否存在下一个块组,如果存在,则执行步骤104,如果不存在,则执行步骤111;
步骤111;内存申请失败,作错误处理,结束。
图4为本实施例内存释放的流程图,各个操作是由内存管理模块执行的,如图所示,该流程包括以下步骤:
步骤201,内存管理模块收到释放内存请求,输入参数为待释放内存地址,待释放内存减去管理结构所需大小得一地址,定义为待处理内存;
步骤202:根据待处理内存块携带的管理结构判断其是否存在相邻且空闲的前一个内存块,如果存在,执行步骤203,如果不存在,则直接执行步骤204;
步骤203:从所述前一个空闲内存块所属块组的空闲内存块链表中删除该内存块对应的节点,将待处理的内存块和该前一个空闲内存块合并,设置合并后内存块的内存管理结构的内容为:内存大小size=两者之和、地址相邻的后一内存块的存在标记have_next_nbr=待处理内存块的原值,使用标记used_flag=0,地址相邻的前一个内存块的位置prev_nbr_addr=所述前一个空闲内存块的原值,然后将合并后的内存块设置为新的待处理内存,执行步骤204;
步骤204:判断待处理内存是否存在相邻且空闲的后一块内存,如果存在,则执行步骤205,如果不存在,则执行步骤206;
步骤205:将所述后一个空闲内存块对应的链表节点从其所属块组的空闲内存块链表中删除,将待处理的内存块和该后一个空闲内存块合并,设置合并后内存块的内存管理结构的内容为:内存大小size=两者之和、地址相邻的后一内存块的存在标记have_next_nbr=后一个内存块的原值,使用标记used_flag=0,地址相邻的前一个内存块的位置prev_nbr_addr=待处理内存块的原值,然后将合并后的内存块设置为新的待处理内存,执行步骤206;
步骤206:根据待处理内存块的大小确定其所属的块组,在该块组的空闲内存块链表中加入指示该待处理内存块的节点,结束。
在上述实施例的基础上,本发明还可以有各种变换,这些变换应当属于本发明的保护范围之内。
例如:对空闲内存块的合并是因为一直拆分不合并的话,会导致空闲内存块越来越小,当用户申请较大内存时就会申请不成功,而实际上可用内存还很多,所以内存合并是必须的,数学上可以证明实施例中采用的每次释放时与前一个、后一个空闲块合并就可以保证合并无遗漏了。但是,上述合并的方式并不是唯一的,在另一实施例中,也可以采用定时合并的方式,即在定时器到时,搜索内存中的空闲内存块,可以按顺序将可合并的空闲内存块都合并在一起。
又如,本实施例在查找空闲内存块时,是从能容纳计算出的最小内存的空闲内存块所属块组开始查找的,但在另一实施例中,是先从最大空闲块组开始寻找,找不到再继续找次大空闲块组,直到所属块组,还可以采用其他顺序。事先由内存管理模块将查找顺序设定好就可以了。
又如:在分配空闲内存时,确定了要查找的块组后,上述实施例是在该块组的链表中找到第一个空闲内存块就进行分配,在另一实施例中,也可以先查找在块组的链表中是否存在刚好能容纳该申请内存的大小为最小单元p倍的空闲内存块,如果没有再对第一个空闲内存块进行分配。

Claims (12)

1.一种内存管理方法,包括下述步骤:
(a)设定一个最小单元,使空闲内存块的大小均为该最小单元p倍,p为正整数,同时定义多个块组,每个块组对应于一个用内存大小标识的区间且各区间互不重叠,使各个块组对应的内存大小的区间合在一起覆盖了用户可能申请使用的内存大小,每个块组可包括多个大小不同的空闲内存块;
(b)使用时,将内存划分为一个或多个空闲内存块,在内存中维护每个块组当前所包括的空闲内存块的信息,以及每个内存块的大小和使用情况的信息;
(c)内存管理模块收到内存分配请求后,确定能满足该请求的最小空闲内存块的大小,然后从那些可能具有该最小空闲内存块或更大空闲内存块的块组中寻找一个能满足该请求的空闲内存块进行分配,如找到,执行下一步,否则,此次申请失败,结束;
(d)如果找到的空闲内存块即为所述最小空闲内存块,执行步骤(e),否则,其大小要大于所述最小空闲内存块的大小,执行步骤(f);
(e)将找到的空闲内存块的可用区间分配给用户使用,更新该内存块的信息以及其所属块组的空闲内存块的信息,此次申请成功,结束;
(f)将找到的空闲内存块拆分为最小空闲内存块和余下部分构成的空闲内存块,将最小空闲内存块的可用区间分配给用户使用,并更新该两个内存块的信息及其所属块组的空闲内存块的信息,此次申请成功,结束。
2.如权利要求1所述的内存管理方法,其特征在于,还包括以下释放内存和合并空闲内存块的步骤:
(h)内存管理模块收到释放内存请求,根据请求中的参数找到待处理的内存块;
(i)判断与所述待处理的内存块相邻的前一个和后一个内存块是否为空闲内存块,如果是,执行下一步,否则,执行步骤(k);
(j)将所述待处理的内存块与其相邻的前一个和/或后一个空闲内存块合并,将该合并的空闲内存块作为新的待处理内存块,更新被合并的空闲内存块所属块组的空闲内存块的信息;
(k)更新所述待处理内存块的信息及其所属块组的空闲内存块的信息,结束。
3.如权利要求2所述的内存管理方法,其特征在于,所述步骤(c)中,所述内存管理模块在查找能满足所述内存分配请求的空闲内存块时,是从所述最小空闲内存块所属的块组或其下一个块组开始查找,如果在该块组中找不到,再向到其下一个块组去查找,如此依次查找。
4.如权利要求1或2所述的内存管理方法,其特征在于,所述步骤(a)按以下方式定义块组的区间:第n个块组对应区间内的内存大小为所述最小单元的2n倍到2(n+1)-1倍,n=0,1,2,……。
5.如权利要求3所述的内存管理方法,其特征在于,所述步骤(b)还事先建立p值与开始查找的块组的块组号的映射关系,在所述步骤(c)中可根据最小空闲内存块的p值直接确定开始查找的块组。
6.如权利要求1或2所述的内存管理方法,其特征在于,所述步骤(b)中,是为每个块组维护一个空闲内存块链表,链表中的节点指示了对应块组当前所包括的所有空闲内存块及其位置信息,且还为每个内存块建立了一个用于记录其信息的内存管理结构,该结构中至少包含该内存块的大小和使用标志的信息。
7.如权利要求6所述的内存管理方法,其特征在于,所述空闲内存块链表为双向链表,链表中每一个中间节点均保存了其前、后相邻节点的地址信息。
8.如权利要求6所述的内存管理方法,其特征在于,所述空闲内存块链表的第一个节点均建立在专用内存区,其第二个及以后的节点均建立在该节点所指示的空闲内存块中。
9.如权利要求6所述的内存管理方法,其特征在于,所述步骤(b)为每个内存块建立的内存管理结构设置在每个内存块内的起始位置,所述步骤(c)中收到大小为size的内存分配请求后,需要先将size加上该内存管理结构所需的大小作为待分配的最小内存大小,再确定能满足该请求的最小空闲内存块的大小,其中,size为大于等于1的正整数。
10.如权利要求6所述的内存管理方法,其特征在于,所述步骤(c)在确定了能满足该请求的最小空闲内存块的大小后,在该最小空闲内存块也是其所属块组中最小的空闲内存块时,查找其所属块组的空闲内存块链表,否则查找其所属块组的下一个块组的空闲内存块链表,从查找的链表中取出存在的第一个空闲内存块进行分配。
11.如权利要求6所述的内存管理方法,其特征在于,所述为每个内存块建立的内存管理结构中还包括地址相邻的前一个内存块的位置信息和/或是否存在地址相邻的后一内存块的标志信息。
12.如权利要求6所述的内存管理方法,其特征在于,当空闲内存块被分配给用户使用而更新其所属块组的空闲内存块的信息时,是将该块组的空闲内存块链表中对应于该空闲内存块的节点从该链表中删除,当因拆分、释放而有新的空闲内存块生成而更新该新的空闲内存块所属块组的空闲内存块的信息时,是在该块组的空闲内存块链表中加入用于指示该空闲内存块的节点。
CNB2005101176717A 2005-11-08 2005-11-08 一种内存管理方法 Expired - Fee Related CN100382048C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005101176717A CN100382048C (zh) 2005-11-08 2005-11-08 一种内存管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005101176717A CN100382048C (zh) 2005-11-08 2005-11-08 一种内存管理方法

Publications (2)

Publication Number Publication Date
CN1963788A CN1963788A (zh) 2007-05-16
CN100382048C true CN100382048C (zh) 2008-04-16

Family

ID=38082851

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005101176717A Expired - Fee Related CN100382048C (zh) 2005-11-08 2005-11-08 一种内存管理方法

Country Status (1)

Country Link
CN (1) CN100382048C (zh)

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101286177B (zh) * 2008-05-30 2010-06-02 中兴通讯股份有限公司 一种在文件分配表中给文件分配空间的方法及装置
CN101499034A (zh) * 2009-03-05 2009-08-05 北京中星微电子有限公司 内存管理方法
CN101853210A (zh) * 2010-05-25 2010-10-06 惠州华阳通用电子有限公司 一种内存管理方法及装置
CN101853215B (zh) * 2010-06-01 2012-05-02 恒生电子股份有限公司 一种内存分配方法及装置
CN102063378B (zh) * 2010-12-17 2013-02-13 曙光信息产业股份有限公司 一种在内核中高速分配连续内存的方法
CN102063385A (zh) * 2010-12-23 2011-05-18 深圳市金宏威实业发展有限公司 一种内存管理方法和系统
CN102439570A (zh) * 2011-10-27 2012-05-02 华为技术有限公司 针对多步长非一致性内存访问numa架构的内存管理方法及装置
CN104598390B (zh) * 2011-11-14 2019-06-04 北京奇虎科技有限公司 一种数据存储方法及装置
CN102446139B (zh) * 2011-11-14 2015-02-18 奇智软件(北京)有限公司 一种数据存储方法及装置
CN102521143B (zh) * 2011-12-14 2015-04-15 瑞斯康达科技发展股份有限公司 一种堆数据处理方法及装置
CN102866954B (zh) * 2012-08-31 2015-11-25 华为技术有限公司 内存分配的方法及装置
CN102915276B (zh) * 2012-09-25 2015-06-03 武汉邮电科学研究院 一种用于嵌入式系统的内存控制方法
CN103077126B (zh) * 2012-12-24 2016-08-03 中兴通讯股份有限公司 一种内存管理方法和装置
CN103106147B (zh) * 2013-03-08 2016-03-16 中国科学院上海微系统与信息技术研究所 内存分配方法及系统
CN103593243B (zh) * 2013-11-01 2017-05-10 浪潮电子信息产业股份有限公司 一种可动态扩展的增加虚拟机资源集群系统
CN103914355A (zh) * 2014-03-12 2014-07-09 汉柏科技有限公司 对内存重复释放进行定位的方法和装置
CN104021087B (zh) * 2014-06-24 2018-07-17 上海众源网络有限公司 内存空间管理方法及系统
CN105302734B (zh) * 2014-07-22 2018-04-06 北京畅游天下网络技术有限公司 内存管理系统和方法
CN104199781A (zh) * 2014-08-14 2014-12-10 深圳百科信息技术有限公司 一种基于共享内存的内存碎片分配方法和装置
CN105589809A (zh) * 2014-10-24 2016-05-18 中国科学院深圳先进技术研究院 一种内存管理方法及装置
CN105302737A (zh) * 2015-11-24 2016-02-03 浪潮(北京)电子信息产业有限公司 一种内存分配管理方法及系统
CN106156639A (zh) * 2016-06-28 2016-11-23 北京小米移动软件有限公司 数据分区加密方法及装置
CN106201727A (zh) * 2016-07-27 2016-12-07 浪潮(北京)电子信息产业有限公司 一种操作系统的内存管理方法及装置
CN106547625B (zh) * 2016-11-04 2021-01-12 深圳市证通电子股份有限公司 金融终端的内存分配方法及装置
EP3534264B1 (en) 2016-11-23 2024-05-22 Huawei Technologies Co., Ltd. Memory allocation method and apparatus
CN108108307A (zh) * 2016-11-24 2018-06-01 中移(杭州)信息技术有限公司 一种资源处理方法及终端
CN106776375A (zh) * 2016-12-27 2017-05-31 东方网力科技股份有限公司 一种磁盘内部的数据缓存方法及装置
CN107168800A (zh) * 2017-05-16 2017-09-15 郑州云海信息技术有限公司 一种内存分配方法及装置
CN107168804A (zh) * 2017-05-31 2017-09-15 上海联影医疗科技有限公司 一种内存资源管理方法与系统
CN108874532B (zh) * 2017-06-01 2020-11-06 北京旷视科技有限公司 内存分配方法及设备
CN107273061A (zh) * 2017-07-12 2017-10-20 郑州云海信息技术有限公司 一种固态硬盘创建多namespace的方法及系统
CN107704199A (zh) * 2017-09-07 2018-02-16 郑州云海信息技术有限公司 一种固态硬盘的逻辑分区方法及装置
CN109947560A (zh) * 2019-02-25 2019-06-28 深圳市创联时代科技有限公司 一种内存管理方法
CN111241004A (zh) * 2019-12-30 2020-06-05 苏州凯毅斯智能驱动技术有限公司 电动摩托车用嵌入式软件内存分配算法
CN111338981B (zh) * 2020-02-21 2022-11-08 深圳震有科技股份有限公司 一种内存防碎片方法、系统及储存介质
CN113779426A (zh) * 2020-06-10 2021-12-10 深圳云天励飞技术有限公司 数据存储方法、装置、终端设备及存储介质
CN111949411B (zh) * 2020-08-31 2023-02-03 深圳赛安特技术服务有限公司 资源分配方法、装置、计算机设备及计算机可读存储介质
CN112231101B (zh) * 2020-10-16 2024-03-01 北京中科网威信息技术有限公司 内存分配方法、装置及可读存储介质
CN112269665B (zh) * 2020-12-22 2021-05-11 北京金山云网络技术有限公司 内存的处理方法和装置、电子设备和存储介质
CN112685333A (zh) * 2020-12-28 2021-04-20 上海创功通讯技术有限公司 一种堆内存管理方法及装置
CN113038141B (zh) * 2021-03-26 2023-07-28 青岛海信移动通信技术有限公司 视频帧处理方法及电子设备
CN115964002B (zh) * 2023-03-13 2023-07-07 杭州炬华科技股份有限公司 一种电能表终端档案管理方法、装置、设备及介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6342895B1 (en) * 1997-12-31 2002-01-29 Lg Electronics Inc. Apparatus and method for memory allocation
US20030120887A1 (en) * 2001-12-26 2003-06-26 Kim Bong Wan Memory allocation method using multi-level partition
CN1427342A (zh) * 2001-12-21 2003-07-02 上海贝尔有限公司 一种内存管理系统及其分配方法
CN1527206A (zh) * 2003-03-03 2004-09-08 华为技术有限公司 一种内存池管理的方法
CN1567250A (zh) * 2003-06-11 2005-01-19 中兴通讯股份有限公司 一种高速零碎片的小对象内存结构及分配方法
JP2005050010A (ja) * 2003-07-31 2005-02-24 Kyocera Mita Corp メモリ管理方式

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6342895B1 (en) * 1997-12-31 2002-01-29 Lg Electronics Inc. Apparatus and method for memory allocation
CN1427342A (zh) * 2001-12-21 2003-07-02 上海贝尔有限公司 一种内存管理系统及其分配方法
US20030120887A1 (en) * 2001-12-26 2003-06-26 Kim Bong Wan Memory allocation method using multi-level partition
CN1527206A (zh) * 2003-03-03 2004-09-08 华为技术有限公司 一种内存池管理的方法
CN1567250A (zh) * 2003-06-11 2005-01-19 中兴通讯股份有限公司 一种高速零碎片的小对象内存结构及分配方法
JP2005050010A (ja) * 2003-07-31 2005-02-24 Kyocera Mita Corp メモリ管理方式

Also Published As

Publication number Publication date
CN1963788A (zh) 2007-05-16

Similar Documents

Publication Publication Date Title
CN100382048C (zh) 一种内存管理方法
CN101221536B (zh) 嵌入式系统的内存管理方法及装置
CN104636285B (zh) 一种闪存存储系统及其读写、删除方法
CN102446139B (zh) 一种数据存储方法及装置
CN100590609C (zh) 一种基于非连续页的动态内存管理方法
CN102968378B (zh) 一种内存分配和释放的方法、装置及系统
CN102253897B (zh) 一种内存池管理方法及装置
CN103455433B (zh) 内存管理方法及系统
CN1996258A (zh) 一种动态内存池的实现方法
CN100440221C (zh) 管理文件系统的设备和方法
CN101122883A (zh) 一种避免内存碎片化的内存分配方法
CN103425435B (zh) 磁盘存储方法及磁盘存储系统
CN101610287A (zh) 一种应用于分布式海量存储系统的负载均衡方法
CN112947856B (zh) 一种内存数据的管理方法、装置、计算机设备及存储介质
CN104731799A (zh) 内存数据库管理装置
CN102819494B (zh) 一种闪存顺序写入时的优化方法
CN104508639A (zh) 使用一致性域表的一致性管理
CN101110043A (zh) 一种多核系统的资源管理方法和控制核
CN101344861B (zh) 一种智能卡内存管理方法
CN101692252A (zh) 文件空闲块的分配和回收方法
CN104850505B (zh) 基于链式堆叠的内存管理方法与系统
CN103218305B (zh) 存储空间的分配方法
CN103136104A (zh) 一种内存管理方法和系统
CN104778203A (zh) 费控智能电能表中负荷记录分块索引存储及查询方法
CN105718319B (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
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20080416

Termination date: 20151108

EXPY Termination of patent right or utility model