CN112685333B - 一种堆内存管理方法及装置 - Google Patents
一种堆内存管理方法及装置 Download PDFInfo
- Publication number
- CN112685333B CN112685333B CN202011575014.8A CN202011575014A CN112685333B CN 112685333 B CN112685333 B CN 112685333B CN 202011575014 A CN202011575014 A CN 202011575014A CN 112685333 B CN112685333 B CN 112685333B
- Authority
- CN
- China
- Prior art keywords
- memory block
- memory
- node
- target
- allocated
- 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
Links
- 230000015654 memory Effects 0.000 title claims abstract description 537
- 238000007726 management method Methods 0.000 title claims abstract description 21
- 238000000034 method Methods 0.000 claims abstract description 19
- 238000012545 processing Methods 0.000 claims description 10
- 238000013467 fragmentation Methods 0.000 description 8
- 238000006062 fragmentation reaction Methods 0.000 description 8
- 230000011218 segmentation Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
Landscapes
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种堆内存管理方法及装置,其中方法为:获取空闲内存块链表;所述空闲内存块链表任一结点存储了该结点对应内存块的大小;所述空闲内存块链表中各结点是按照预设规则排列的;按照预设顺序查找所述各结点对应内存块的大小,确定堆内存中的第一目标内存块;所述预设顺序是根据所述预设规则确定的;所述第一目标内存块为:所述堆内存中不小于待分配内存空间的最小内存块;若所述第一目标内存块的空间与所述待分配内存空间的第一差值不大于第一阈值,则将所述第一目标内存块作为分配的内存块。
Description
技术领域
本发明涉及堆内存管理技术领域,尤其涉及一种堆内存管理方法及装置。
背景技术
堆内存允许程序在运行时动态地申请某个大小的内存空间,为程序的设计、运行提供了便利,许多计算机处理***会涉及到堆内存。堆内存中需要频繁地进行内存块的分配和释放,那么堆内存的管理便是随之而来的问题。由于程序运行时每次都必须用地址连续的内存,所以堆内存每次也会分配一个地址连续的内存块。
对于较大的一段内存,直接将其分配出去会造成大量的内存浪费。为了保证堆内存充分利用,切分多个小段内存,便可以多次分配。但随着堆内存使用的次数增多,整个堆内存可能会出现多块连续但较小的内存,这些内存空间由于较小,成为碎片化的内存,很难作为内存块分配运行程序,这些碎片化的又积少成多,使得堆内存一部分空间被浪费,这就是堆内存的碎片化问题。目前堆内存的碎片化较为普遍,亟待解决。
发明内容
本发明提供一种堆内存管理方法及装置,解决了现有技术中堆内存的碎片化的问题。
第一方面,本发明提供一种堆内存管理方法,包括:获取空闲内存块链表;所述空闲内存块链表任一结点存储了该结点对应内存块的大小;所述空闲内存块链表中各结点是按照预设规则排列的;
按照预设顺序查找所述各结点对应内存块的大小,确定堆内存中的第一目标内存块;所述预设顺序是根据所述预设规则确定的;所述第一目标内存块为:所述堆内存中不小于待分配内存空间的最小内存块;
若所述第一目标内存块的空间与所述待分配内存空间的第一差值不大于第一阈值,则将所述第一目标内存块作为分配的内存块。
上述方法下,所述空闲内存块链表任一结点存储了该结点对应内存块的大小,且按预设规则排列,那么通过预设顺序可以查找到所述各结点对应内存块的大小,确定堆内存中的第一目标内存块,从而所述第一目标内存块是内存空间最接近所述待分配内存空间的内存块,且第一目标内存块的空间足够分配,如果所述第一目标内存块的空间与所述待分配内存空间的第一差值不大于第一阈值,说明所述第一目标内存块额外的分配空间小于设定的第一阈值内,且不至于切分后额外的内存成为碎片化的内存,从而缓解了堆内存的碎片化现象。
可选的,若所述第一差值不小于第二阈值,则将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块;所述第二阈值大于所述第一阈值;所述第一子目标内存块的空间与所述待分配内存空间的差值不大于所述第一阈值;
将所述第一子目标内存块作为分配的内存块。
上述方法中,由于所述第二阈值大于所述第一阈值,若所述第一差值不小于第二阈值,说明堆内存除第一目标内存块之外的内存大于设定的所述第二阈值,仍然可以作为后续使用,不至于切分后成为碎片化的内存。
可选的,若所述第一差值大于所述第一阈值且小于第二阈值,则按照所述预设顺序查找所述各结点对应内存块的大小,确定所述堆内存中的第二目标内存块;所述第二目标内存块为:所述堆内存中与待分配内存空间的第二差值不小于所述第二阈值的最小内存块;
将所述第二目标内存块作为所述第一目标内存块,返回将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块的步骤。
上述方法中,若所述第一差值大于所述第一阈值且小于第二阈值,说明切分后的空间虽然不至于碎片化,但又难以作为后续使用,所以可以按照所述预设顺序查找所述各结点对应内存块的大小,直至查找到第二目标内存块,作为第一目标内存块,从而可以使得所述第一目标内存块切分后也不至于碎片化。
可选的,所述第一子目标内存块的空间等于所述待分配内存空间。
上述方式下,可以最大化利用堆内存空间,使得剩余的第二子目标内存块最大。
可选的,所述预设规则具体为:按照所述各结点对应的内存块大小排列所述各结点的顺序。
可选的,当所述各结点的顺序为按照所述各结点对应的内存块大小从大到小排列时,所述预设顺序具体为从所述空闲内存块链表的尾结点依次向首结点查找;
当所述各结点的顺序为按照所述各结点对应的内存块大小从小到大排列时,所述预设顺序具体为从所述空闲内存块链表的首结点依次向尾结点查找。
上述方式下,无论所述各结点的顺序按对应的内存块大小从大到小或者从小到大排列时,都从所述空闲内存块链表所对应内存块大小从小到大查找,尽块查找到第一差值不大于第一阈值的第一目标内存块,作为分配的内存块。
可选的,获取内存块总链表;所述内存块总链表按照各内存块的地址顺序依次存储了所述各内存块的大小;
针对所述内存块总链表任一结点,在该结点所对应的内存块释放时,若该结点的前一结点的内存块和\或该结点的后一结点的内存块未使用,则合并该结点的内存块、所述前一结点的内存块和\或所述后一结点的内存块,从而更新所述内存块总链表。
上述方式下,所述内存块总链表按照各内存块的地址顺序依次存储了所述各内存块的大小,那么在该结点所对应的内存块释放时,若该结点的前一结点的内存块和\或该结点的后一结点的内存块未使用,则合并内存块,从而使得合并后结点的内存块更大。
第二方面,本发明提供一种堆内存管理装置,包括:获取模块,用于获取空闲内存块链表;所述空闲内存块链表任一结点存储了该结点对应内存块的大小;所述空闲内存块链表中各结点是按照预设规则排列的;
查找模块,用于按照预设顺序查找所述各结点对应内存块的大小,确定堆内存中的第一目标内存块;所述预设顺序是根据所述预设规则确定的;所述第一目标内存块为:所述堆内存中不小于待分配内存空间的最小内存块;
处理模块,用于若所述第一目标内存块的空间与所述待分配内存空间的第一差值不大于第一阈值,则将所述第一目标内存块作为分配的内存块。
可选的,所述处理模块还用于:
若所述第一差值不小于第二阈值,则将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块;所述第二阈值大于所述第一阈值;所述第一子目标内存块的空间与所述待分配内存空间的差值不大于所述第一阈值;
将所述第一子目标内存块作为分配的内存块。
可选的,所述处理模块还用于:
若所述第一差值大于所述第一阈值且小于第二阈值,则按照所述预设顺序查找所述各结点对应内存块的大小,确定所述堆内存中的第二目标内存块;所述第二目标内存块为:所述堆内存中与待分配内存空间的第二差值不小于所述第二阈值的最小内存块;
将所述第二目标内存块作为所述第一目标内存块,返回将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块的步骤。
可选的,所述第一子目标内存块的空间等于所述待分配内存空间。
可选的,所述预设规则具体为:按照所述各结点对应的内存块大小排列所述各结点的顺序。
可选的,当所述各结点的顺序为按照所述各结点对应的内存块大小从大到小排列时,所述预设顺序具体为从所述空闲内存块链表的尾结点依次向首结点查找;
当所述各结点的顺序为按照所述各结点对应的内存块大小从小到大排列时,所述预设顺序具体为从所述空闲内存块链表的首结点依次向尾结点查找。
可选的,所述获取模块还用于:获取内存块总链表;所述内存块总链表按照各内存块的地址顺序依次存储了所述各内存块的大小;所述处理模块还用于:针对所述内存块总链表任一结点,在该结点所对应的内存块释放时,若该结点的前一结点的内存块和\或该结点的后一结点的内存块未使用,则合并该结点的内存块、所述前一结点的内存块和\或所述后一结点的内存块,从而更新所述内存块总链表。
上述第二方面及第二方面各个可选装置的有益效果,可以参考上述第一方面及第一方面各个可选方法的有益效果,这里不再赘述。
第三方面,本发明提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。
第四方面,本发明提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。
本发明的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种堆内存管理方法对应的流程示意图;
图2为本发明实施例提供的一种堆内存管理方法对应的内存分配流程示意图;
图3为本发明实施例提供的一种堆内存管理方法对应的内存释放流程示意图;
图4为本发明实施例提供的一种堆内存管理装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供一种堆内存管理方法。
步骤101:获取空闲内存块链表。
所述空闲内存块链表任一结点存储了该结点对应内存块的大小;所述空闲内存块链表中各结点是按照预设规则排列的。
步骤102:按照预设顺序查找所述各结点对应内存块的大小,确定堆内存中的第一目标内存块。
所述预设顺序是根据所述预设规则确定的;所述第一目标内存块为:所述堆内存中不小于待分配内存空间的最小内存块。
步骤103:若所述第一目标内存块的空间与所述待分配内存空间的第一差值不大于第一阈值,则将所述第一目标内存块作为分配的内存块。
需要说明的是,所述预设规则可以根据具体场景设置,如按照所述各结点对应的内存块大小排列所述各结点的顺序,根据所述各结点对应的内存块标识排列所述各结点的顺序,或者随机排列所述各结点。
值得一提的是,无论所述各结点如何排列,并不改变第一目标内存块的结果,所述堆内存中不小于待分配内存空间的最小内存块,预设规则和预设顺序如何只影响查找到第一目标内存块的效率。
一种可选实施方式中,所述预设规则具体为:按照所述各结点对应的内存块大小排列所述各结点的顺序。
举例来说,待分配内存空间为120KB,第一阈值为20KB,空闲内存块链表包括:空闲结点1,对应内存块大小70KB;空闲结点2,对应内存块大小128KB;空闲结点3,对应内存块大小220KB;空闲结点4,对应内存块大小500KB;空闲内存块链表中各结点的排列顺序依次为:空闲结点1;空闲结点2;空闲结点3;空闲结点4;空闲内存块链表中各结点的排列顺序也可以依次为:空闲结点4;空闲结点3;空闲结点2;空闲结点1。
显然,第一目标内存块为空闲结点2对应的内存块,内存块大小为128KB,且第一差值为8KB,不大于第一阈值20KB,所以将空闲结点2对应的内存块分配给所述待分配内存空间。
一种可选实施方式中,当所述各结点的顺序为按照所述各结点对应的内存块大小从大到小排列时,所述预设顺序具体为从所述空闲内存块链表的尾结点依次向首结点查找;当所述各结点的顺序为按照所述各结点对应的内存块大小从小到大排列时,所述预设顺序具体为从所述空闲内存块链表的首结点依次向尾结点查找。
举例来说,空闲内存块链表中各结点的排列顺序依次为:空闲结点1;空闲结点2;空闲结点3;空闲结点4;所述预设顺序具体为从首结点依次向尾结点查找,即空闲结点1;空闲结点2;空闲结点3;空闲结点4。
另一种可能的情形中,空闲内存块链表中各结点的排列顺序也可以依次为:空闲结点4;空闲结点3;空闲结点2;空闲结点1;所述预设顺序具体为从尾结点依次向首结点查找,即空闲结点1;空闲结点2;空闲结点3;空闲结点4,所以还可以从小往大找,尽快找到第一目标内存块。
上述方式下,无论所述各结点的顺序按对应的内存块大小从大到小或者从小到大排列时,都从所述空闲内存块链表所对应内存块大小从小到大查找,尽快查找到第一差值不大于第一阈值的第一目标内存块,作为分配的内存块。
步骤101~步骤103的方式下,若所述第一目标内存块的空间与所述待分配内存空间的第一差值不大于第一阈值,那么所述第一目标内存块是内存空间最接近所述待分配内存空间的内存块,且第一目标内存块的空间足够分配,如果所述第一目标内存块的空间与所述待分配内存空间的第一差值不大于第一阈值,不至于空间浪费,也不必切分,从而缓解了堆内存的碎片化现象。
一种可选实施方式中,若所述第一差值不小于第二阈值,则将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块;所述第二阈值大于所述第一阈值;所述第一子目标内存块的空间与所述待分配内存空间的差值不大于所述第一阈值;
将所述第一子目标内存块作为分配的内存块。
如待分配的空间为130KB,那么所述第一目标内存块为空闲结点3对应的内存块,内存块大小为220KB,则第一差值为90KB,第二阈值为80KB,可以将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块。
所述第一子目标内存块的空间与所述待分配内存空间的差值不大于所述第一阈值,所以既够所述待分配内存空间分配,又不至于浪费,使得差值不大于所述第一阈值。
具体来说,还可以设置切分后的第二子目标内存块的大小不小于第二阈值,这样可以保证切分后的第二子目标内存块还能作为较大的内存块继续分配。
上述方法中,由于所述第二阈值大于所述第一阈值,若所述第一差值不小于第二阈值,说明堆内存除第一目标内存块之外的内存大于设定的所述第二阈值,仍然可以作为后续使用,不至于切分后成为碎片化的内存。
需要说明的是,所述第一子目标内存块的空间可以等于所述待分配内存空间。
上述方式下,可以最大化利用堆内存空间,使得剩余的第二子目标内存块最大。
进一步地,一种可选实施方式中,若所述第一差值大于所述第一阈值且小于第二阈值,则按照所述预设顺序查找所述各结点对应内存块的大小,确定所述堆内存中的第二目标内存块;所述第二目标内存块为:所述堆内存中与待分配内存空间的第二差值不小于所述第二阈值的最小内存块。
举例来说,如待分配的空间为150KB,那么所述第一目标内存块为空闲结点3对应的内存块,内存块大小为220KB,则第一差值为70KB,大于第一阈值20KB,但又小于第二阈值为80KB,直接分配导致空间浪费不在可接受范围第一阈值内,但切分后,剩余的内存块也不在可接受范围,所以可以继续查找,直到查找到所述第二目标内存块。
将所述第二目标内存块作为所述第一目标内存块,返回将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块的步骤。
上述方法中,若所述第一差值大于所述第一阈值且小于第二阈值,说明切分后的空间虽然不至于碎片化,但又难以作为后续使用,所以可以按照所述预设顺序查找所述各结点对应内存块的大小,直至查找到第二目标内存块,作为第一目标内存块,从而可以使得所述第一目标内存块切分后也不至于碎片化。
可选的,获取内存块总链表;所述内存块总链表按照各内存块的地址顺序依次存储了所述各内存块的大小;
针对所述内存块总链表任一结点,在该结点所对应的内存块释放时,若该结点的前一结点的内存块和\或该结点的后一结点的内存块未使用,则合并该结点的内存块、所述前一结点的内存块和\或所述后一结点的内存块,从而更新所述内存块总链表。
上述方式下,所述内存块总链表按照各内存块的地址顺序依次存储了所述各内存块的大小,那么在该结点所对应的内存块释放时,若该结点的前一结点的内存块和\或该结点的后一结点的内存块未使用,则合并内存块,从而使得合并后结点的内存块更大。
下面结合图2,详细描述本发明实施例提供的一种堆内存管理方法对应的内存分配流程。
堆内存中每个内存块都包含一个管理用的数据头,数据头中包含预设标志位,通过每个内存块的预设标志位可以指示确定该内存块是否被分配。
堆内存中未分配内存块通过一个空闲内存块链表维护,堆内存维护内存块空闲链表将空闲内存块按大小顺序从小到大排列。
当分配内存块时,可以从空闲内存块链表的表头开始依次查找,直至查找到合适大小内存块(第一目标内存块),查找到内存块大小不小于要申请的大小。
若查找到内存块大小与申请大小相当(不大于第一阈值),则直接将查找到内存块分配给申请应用;若找到的内存块大小较大(不小于第二阈值),则把找到的内存块***成A内存块和B内存块(A内存块大小与申请大小相同)。
A内存块给申请者使用,B内存块挂在空闲链表上,分配后再次将内存块空闲链表排序。由于空闲内存链表上内存块有序按从小到大排列,这样尽可能的避免了分配时查找到的是大尺寸内存块,进而减少了分配时内存块的***,减少了内存碎片化,保证后续内存申请能够申请到合适的内存。
下面结合图3,详细描述本发明实施例提供的一种堆内存管理方法对应的内存释放流程。
释放内存块时,首先将待释放内存块的预设标志位置为未使用。
并判断前后内存块是否未使用,若未使用则将待释放内存块与前一内存块或后一内存块融为一块内存,并将其按内存块的大小有序***空闲内存块链表,保证***后内存块空闲链表是有序排列。
若待释放内存块不能与前一内存块或后一内存块融合则直接将其有序***空闲内存块链表,释放结束。
此种堆内存申请及释放方法将***内存块空闲链表有序排列,在保证内存块申请及释放时有序遍历的同时,减少内存块使用过程中碎片化,保证应用能申请到合适大小内存块,极大提高***稳定性。
如图4所示,本发明提供一种堆内存管理装置,包括:获取模块401,用于获取空闲内存块链表;所述空闲内存块链表任一结点存储了该结点对应内存块的大小;所述空闲内存块链表中各结点是按照预设规则排列的;
查找模块402,用于按照预设顺序查找所述各结点对应内存块的大小,确定堆内存中的第一目标内存块;所述预设顺序是根据所述预设规则确定的;所述第一目标内存块为:所述堆内存中不小于待分配内存空间的最小内存块;
处理模块403,用于若所述第一目标内存块的空间与所述待分配内存空间的第一差值不大于第一阈值,则将所述第一目标内存块作为分配的内存块。
可选的,所述处理模块403还用于:
若所述第一差值不小于第二阈值,则将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块;所述第二阈值大于所述第一阈值;所述第一子目标内存块的空间与所述待分配内存空间的差值不大于所述第一阈值;
将所述第一子目标内存块作为分配的内存块。
可选的,所述处理模块403还用于:
若所述第一差值大于所述第一阈值且小于第二阈值,则按照所述预设顺序查找所述各结点对应内存块的大小,确定所述堆内存中的第二目标内存块;所述第二目标内存块为:所述堆内存中与待分配内存空间的第二差值不小于所述第二阈值的最小内存块;
将所述第二目标内存块作为所述第一目标内存块,返回将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块的步骤。
可选的,所述第一子目标内存块的空间等于所述待分配内存空间。
可选的,所述预设规则具体为:按照所述各结点对应的内存块大小排列所述各结点的顺序。
可选的,当所述各结点的顺序为按照所述各结点对应的内存块大小从大到小排列时,所述预设顺序具体为从所述空闲内存块链表的尾结点依次向首结点查找;
当所述各结点的顺序为按照所述各结点对应的内存块大小从小到大排列时,所述预设顺序具体为从所述空闲内存块链表的首结点依次向尾结点查找。
可选的,所述获取模块401还用于:获取内存块总链表;所述内存块总链表按照各内存块的地址顺序依次存储了所述各内存块的大小;所述处理模块403还用于:针对所述内存块总链表任一结点,在该结点所对应的内存块释放时,若该结点的前一结点的内存块和\或该结点的后一结点的内存块未使用,则合并该结点的内存块、所述前一结点的内存块和\或所述后一结点的内存块,从而更新所述内存块总链表。
基于同一发明构思,本发明实施例还提供了一种计算机设备,包括程序或指令,当所述程序或指令被执行时,如本发明实施例提供的堆内存管理方法及任一可选方法被执行。
基于同一发明构思,本发明实施例还提供了一种计算机可读存储介质,包括程序或指令,当所述程序或指令被执行时,如本发明实施例提供的堆内存管理方法及任一可选方法被执行。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (8)
1.一种堆内存管理方法,其特征在于,包括:
获取空闲内存块链表;所述空闲内存块链表任一结点存储了该结点对应内存块的大小;所述空闲内存块链表中各结点是按照预设规则排列的;
按照预设顺序查找所述各结点对应内存块的大小,确定堆内存中的第一目标内存块;所述预设顺序是根据所述预设规则确定的;所述第一目标内存块为:所述堆内存中不小于待分配内存空间的最小内存块;
若所述第一目标内存块的空间与所述待分配内存空间的第一差值不大于第一阈值,则将所述第一目标内存块作为分配的内存块;
若所述第一差值不小于第二阈值,则将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块;所述第二阈值大于所述第一阈值;所述第一子目标内存块的空间与所述待分配内存空间的差值不大于所述第一阈值;
将所述第一子目标内存块作为分配的内存块;
若所述第一差值大于所述第一阈值且小于第二阈值,则按照所述预设顺序查找所述各结点对应内存块的大小,确定所述堆内存中的第二目标内存块;所述第二目标内存块为:所述堆内存中与待分配内存空间的第二差值不小于所述第二阈值的最小内存块;
将所述第二目标内存块作为所述第一目标内存块,返回将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块的步骤。
2.如权利要求1所述的方法,其特征在于,所述第一子目标内存块的空间等于所述待分配内存空间。
3.如权利要求1所述的方法,其特征在于,所述预设规则具体为:按照所述各结点对应的内存块大小排列所述各结点的顺序。
4.如权利要求3所述的方法,其特征在于,当所述各结点的顺序为按照所述各结点对应的内存块大小从大到小排列时,所述预设顺序具体为从所述空闲内存块链表的尾结点依次向首结点查找;
当所述各结点的顺序为按照所述各结点对应的内存块大小从小到大排列时,所述预设顺序具体为从所述空闲内存块链表的首结点依次向尾结点查找。
5.如权利要求1至4任一项所述的方法,其特征在于,还包括:
获取内存块总链表;所述内存块总链表按照各内存块的地址顺序依次存储了所述各内存块的大小;
针对所述内存块总链表任一结点,在该结点所对应的内存块释放时,若该结点的前一结点的内存块和\或该结点的后一结点的内存块未使用,则合并该结点的内存块、所述前一结点的内存块和\或所述后一结点的内存块,从而更新所述内存块总链表。
6.一种堆内存管理装置,其特征在于,包括:
获取模块,用于获取空闲内存块链表;所述空闲内存块链表任一结点存储了该结点对应内存块的大小;所述空闲内存块链表中各结点是按照预设规则排列的;
查找模块,用于按照预设顺序查找所述各结点对应内存块的大小,确定堆内存中的第一目标内存块;所述预设顺序是根据所述预设规则确定的;所述第一目标内存块为:所述堆内存中不小于待分配内存空间的最小内存块;
处理模块,用于若所述第一目标内存块的空间与所述待分配内存空间的第一差值不大于第一阈值,则将所述第一目标内存块作为分配的内存块;
若所述第一差值不小于第二阈值,则将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块;所述第二阈值大于所述第一阈值;所述第一子目标内存块的空间与所述待分配内存空间的差值不大于所述第一阈值;
将所述第一子目标内存块作为分配的内存块;
若所述第一差值大于所述第一阈值且小于第二阈值,则按照所述预设顺序查找所述各结点对应内存块的大小,确定所述堆内存中的第二目标内存块;所述第二目标内存块为:所述堆内存中与待分配内存空间的第二差值不小于所述第二阈值的最小内存块;
将所述第二目标内存块作为所述第一目标内存块,返回将所述第一目标内存块切分为第一子目标内存块和第二子目标内存块的步骤。
7.一种计算机设备,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至5中任意一项所述的方法被执行。
8.一种计算机可读存储介质,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至5中任意一项所述的方法被执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011575014.8A CN112685333B (zh) | 2020-12-28 | 2020-12-28 | 一种堆内存管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011575014.8A CN112685333B (zh) | 2020-12-28 | 2020-12-28 | 一种堆内存管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112685333A CN112685333A (zh) | 2021-04-20 |
CN112685333B true CN112685333B (zh) | 2024-06-07 |
Family
ID=75452206
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011575014.8A Active CN112685333B (zh) | 2020-12-28 | 2020-12-28 | 一种堆内存管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112685333B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113296703B (zh) * | 2021-05-27 | 2022-08-05 | 山东云海国创云计算装备产业创新中心有限公司 | 一种堆内存管理方法、装置、设备及介质 |
CN113268349B (zh) * | 2021-06-04 | 2022-02-18 | 科东(广州)软件科技有限公司 | 一种计算机内存管理方法、装置、设备及存储介质 |
CN113485835B (zh) * | 2021-07-14 | 2022-04-22 | 深圳大趋智能科技有限公司 | 一种多场景下共享内存的实现方法、***、设备及介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6105053A (en) * | 1995-06-23 | 2000-08-15 | Emc Corporation | Operating system for a non-uniform memory access multiprocessor system |
CN1963788A (zh) * | 2005-11-08 | 2007-05-16 | 中兴通讯股份有限公司 | 一种内存管理方法 |
WO2018018896A1 (zh) * | 2016-07-29 | 2018-02-01 | 华为技术有限公司 | 内存管理装置和方法 |
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN109375985A (zh) * | 2018-09-06 | 2019-02-22 | 新华三技术有限公司成都分公司 | 内存动态管理方法及装置 |
CN110209490A (zh) * | 2018-04-27 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 一种内存管理方法及相关设备 |
CN111078410A (zh) * | 2019-12-11 | 2020-04-28 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN111104347A (zh) * | 2019-12-23 | 2020-05-05 | 北京东土军悦科技有限公司 | 堆内存块查找方法、装置、设备及存储介质 |
CN111338981A (zh) * | 2020-02-21 | 2020-06-26 | 深圳震有科技股份有限公司 | 一种内存防碎片方法、***及储存介质 |
CN111352861A (zh) * | 2020-02-19 | 2020-06-30 | Oppo广东移动通信有限公司 | 内存压缩方法、装置及电子设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9239757B2 (en) * | 2014-05-30 | 2016-01-19 | Sandisk Technologies Inc. | Method and apparatus for relocating data in non-volatile memory |
KR20180059208A (ko) * | 2016-11-25 | 2018-06-04 | 삼성전자주식회사 | 리클레임 제어부를 갖는 메모리 콘트롤러 및 그에 따른 동작 제어 방법 |
-
2020
- 2020-12-28 CN CN202011575014.8A patent/CN112685333B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6105053A (en) * | 1995-06-23 | 2000-08-15 | Emc Corporation | Operating system for a non-uniform memory access multiprocessor system |
CN1963788A (zh) * | 2005-11-08 | 2007-05-16 | 中兴通讯股份有限公司 | 一种内存管理方法 |
WO2018018896A1 (zh) * | 2016-07-29 | 2018-02-01 | 华为技术有限公司 | 内存管理装置和方法 |
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN110209490A (zh) * | 2018-04-27 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 一种内存管理方法及相关设备 |
CN109375985A (zh) * | 2018-09-06 | 2019-02-22 | 新华三技术有限公司成都分公司 | 内存动态管理方法及装置 |
CN111078410A (zh) * | 2019-12-11 | 2020-04-28 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN111104347A (zh) * | 2019-12-23 | 2020-05-05 | 北京东土军悦科技有限公司 | 堆内存块查找方法、装置、设备及存储介质 |
CN111352861A (zh) * | 2020-02-19 | 2020-06-30 | Oppo广东移动通信有限公司 | 内存压缩方法、装置及电子设备 |
CN111338981A (zh) * | 2020-02-21 | 2020-06-26 | 深圳震有科技股份有限公司 | 一种内存防碎片方法、***及储存介质 |
Non-Patent Citations (1)
Title |
---|
宋敏超 ; 李少波 ; .一种新型嵌入式动态内存分配算法.计算机应用.2017,249-252+259. * |
Also Published As
Publication number | Publication date |
---|---|
CN112685333A (zh) | 2021-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112685333B (zh) | 一种堆内存管理方法及装置 | |
US6757802B2 (en) | Method for memory heap and buddy system management for service aware networks | |
CN108038002B (zh) | 一种嵌入式软件内存管理方法 | |
CN108132842B (zh) | 一种嵌入式软件内存管理*** | |
US11042477B2 (en) | Memory management using segregated free lists | |
CN107066498B (zh) | 键值kv存储方法和装置 | |
CN110674052B (zh) | 内存管理方法、服务器及可读存储介质 | |
WO2017050064A1 (zh) | 共享内存数据库的内存管理方法及装置 | |
CN103186469A (zh) | 内存分配方法及装置、内存的回收方法 | |
CN114546295B (zh) | 一种基于zns固态硬盘的智能写分配方法和装置 | |
CN108932271B (zh) | 一种文件管理方法及装置 | |
CN108829523A (zh) | 内存资源分配方法、装置、电子设备及可读存储介质 | |
CN112579595A (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
CN105718319B (zh) | 一种内存池版图解析方法和内存池装置 | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
CN104850505A (zh) | 基于链式堆叠的内存管理方法与*** | |
CN105528371A (zh) | 一种执行写任务的方法、装置及*** | |
CN111177021A (zh) | Java卡碎片管理方法及其存储装置 | |
CN105469173A (zh) | 一种静态内存进行优化管理的方法 | |
CN111338981B (zh) | 一种内存防碎片方法、***及储存介质 | |
CN109660471B (zh) | 基于fpga的指针回收方法及装置 | |
CN110825953A (zh) | 数据查询方法、装置和设备 | |
CN109165305B (zh) | 一种特征值存储、检索方法及装置 | |
CN103942155A (zh) | 一种内存块控制方法及装置 | |
CN113867925A (zh) | 内存管理方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |