CN114116194A - 一种内存的分配方法及系统 - Google Patents

一种内存的分配方法及系统 Download PDF

Info

Publication number
CN114116194A
CN114116194A CN202111031787.4A CN202111031787A CN114116194A CN 114116194 A CN114116194 A CN 114116194A CN 202111031787 A CN202111031787 A CN 202111031787A CN 114116194 A CN114116194 A CN 114116194A
Authority
CN
China
Prior art keywords
memory
virtual address
group
address group
groups
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
Application number
CN202111031787.4A
Other languages
English (en)
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.)
Jinan External Pointer Technology Co ltd
Original Assignee
Jinan External Pointer 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 Jinan External Pointer Technology Co ltd filed Critical Jinan External Pointer Technology Co ltd
Priority to CN202111031787.4A priority Critical patent/CN114116194A/zh
Publication of CN114116194A publication Critical patent/CN114116194A/zh
Priority to PCT/CN2022/112800 priority patent/WO2023029982A1/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种内存的分配方法及系统,包括:将用户空间中的堆内存的虚拟地址划分到多个虚拟地址组中;对所有需要在用户空间中分配的对象进行分组,得到多个对象组以及每个对象组所对应的虚拟地址组;内存分配器根据需要申请内存的长度,在对应的虚拟地址组内采用内存分配算法为每个对象组分配内存。将虚拟地址分为若干组管理,降低了资源竞争,还可以充分发挥不同内存管理算法的特长。

Description

一种内存的分配方法及系统
技术领域
本发明属于内存分配领域,尤其涉及一种内存的分配方法及系统。
背景技术
本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
首先,当CPU需要处理某个变量时,可能会将这个变量所在内存页的一部分载入CPU一级缓存,还可能在此之前,将这个变量所在内存页,从硬盘的交换分区载入主内存,或者从主内存中解压,但是,缓存或者主内存中,有些与这个变量一起载入的位置,实际很少被访问,这造成了,某些字节被传输、存储至缓存与主内存,却不被访问的情况。
其次,计算机系统中可能存在若干“关联变量组”,每个关联变量组都含有两个以上的变量,且,某个关联变量组中的一个变量,如果被访问,则这个关联变量组中的其他变量,很可能在很短的时间内也被访问。可以推论,如果某一个关联变量组内的变量,集中在某些内存页中,则,可能有利于,提高CPU的访存效率,但,如果某一个关联变量组中的变量被分散到过多的内存页中,则,可能不利于,提高CPU访存的效率。
再次,当多个处理器内核的缓存行共享相同位置的某些内存,但是实际使用这些位置的不同字节时,可能造成大量不必要的,为确保缓存一致性而进行的操作。
小对象是一个相对的概念,小对象是指长度远小于一个内存页的内存对象,一般认为小对象的长度小于64个字节。
如果某几个小对象被分配到同一个内存页中,可能总体上恶化以上问题,则这几个小对象,被认定为是“宜分离”的;如果某几个小对象被分配到同一个内存页中,可能总体上优化以上问题,则这几个小对象,被认定为是“宜结合”的。如果某个系统中,“宜分离”的小对象很少在同一个页面中,而“宜结合”的小对象,集中在某些页面中,则称,这个系统具有较高的“小对象分配的合理性”。
另外,如果系统在分配虚拟地址时,只使用一组锁,对全部虚拟地址进行管理,则,可能存在较高的资源竞争。
最后,用以实现内存的分配与释放的算法,对分配速度、资源消耗、减少碎片等问题无法全部进行最佳处理。过往,一个进程内,一般只能固定地采取某几个算法,且分配同样大小的内存时一般只能使用相同的算法。
发明内容
本发明为了解决上述问题,提出了一种内存的分配方法及系统,将用户空间中的堆内存的虚拟地址分为若干组管理,每个组称为虚拟地址组;并给每个虚拟地址组分配一组锁,用以管理本虚拟地址组内虚拟地址的分配,每组锁含至少一个锁,相较于使用一组锁管理所有的虚拟地址的分配,造成的资源竞争更为缓和;可以尽量发挥不同算法的优点;且可以更便捷的提高系统“小对象分配的合理性”。
根据一些实施例,本发明采用如下技术方案:
一种内存的分配方法,包括:
将用户空间中的堆内存的虚拟地址划分到多个虚拟地址组中;
对所有需要在用户空间中分配的对象进行分组,得到多个对象组以及每个对象组所对应的虚拟地址组;
内存分配器根据需要申请内存的长度,在对应的虚拟地址组内采用内存分配算法为每个对象组分配内存。
进一步的,所述内存分配器在保证内存地址对齐的前提下,寻找合适大小的空闲内存;如果内存分配器找到合适大小的空闲内存,则返回供对象组使用的位置;否则,判定内存分配失败。
进一步的,判定内存分配失败后,直接告知分配失败。
进一步的,判定内存分配失败后,在另一个虚拟地址组内分配所需内存,如果仍然失败,才告知分配失败。
进一步的,所述内存分配器还用于,在需要释放内存时,采用内存释放算法对虚拟地址组内虚拟地址进行释放。
进一步的,不同虚拟地址组采用的内存分配算法和内存释放算法可以不同。
进一步的,每个虚拟地址组分配一组锁,用以管理虚拟地址组内虚拟地址的分配与释放,每组锁含至少一个锁。
进一步的,所述分组的具体方法为:某个线程启动时,在所有虚拟地址组中选择一个虚拟地址组与该线程绑定,并将该线程需要在用户空间的堆内存中分配的所有对象划分到一个对象组,所述对象组对应的虚拟地址组即为与该线程绑定的虚拟地址组。
一种内存的分配系统,包括:
虚拟地址组划分模块,其被配置为:将用户空间中的堆内存的虚拟地址划分到多个虚拟地址组中;
对象组划分模块,其被配置为:对所有需要在用户空间中分配的对象进行分组,得到多个对象组以及每个对象组所对应的虚拟地址组;
内存分配模块,其被配置为:内存分配器根据需要申请内存的长度,在对应的虚拟地址组内采用内存分配算法为每个对象组分配内存。
进一步的,还包括内存释放模块,其被配置为:内存分配器在需要释放内存时,采用内存释放算法对本虚拟地址组内虚拟地址进行释放。
本发明的有益效果是:
1、本发明将用户空间中的堆内存的虚拟地址划分到多个虚拟地址组中,并给每个虚拟地址组分配一组锁,用以管理,本虚拟地址组内,虚拟地址的分配,相较于,使用一组锁,管理所有用户空间中的堆内存的虚拟地址的分配,造成的资源竞争更为缓和。
2、本发明将用户空间中的堆内存的虚拟地址划分到多个虚拟地址组中,每个虚拟地址组可以根据需要采用不同的算法,用以对内存进行分配和释放,这有助于最大发挥不同内存分配算法的优势。
3、本发明简化实现聚合“宜结合”的小对象,与隔离“宜分离”的小对象的过程为——指定小对象的虚拟地址的范围,为提高堆中小对象分配的合理性,提供了便利。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1是本发明一种内存的分配方法的流程图;
图2是第一个实施例的内存分配算法的流程图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
术语解释:
内存对象(简称对象):用来存放数据,可以供线程使用,本发明中对象一般指用户空间中的堆中的内存。
第一方面,本发明提供了一种内存的分配方法。
一种内存的分配方法,包括:
S1:将虚拟地址初步划分为多个空间,确定用作用户空间中的堆内存的虚拟地址;所述空间包括内核空间、用户空间,用户空间又含有堆内存。
假设,sys11是某种操作系统,且,sys11中,虚拟地址n11到虚拟地址n12之间的虚拟地址,可以供用户空间中的堆中内存使用。
以sys11是一种64位计算机系统为例,设n11等于0x00FFFFFFFFFF,n12等于0x000100000000。比n11高,且可以被访问的虚拟地址,属于内核空间;不比n11高,且可以被访问的虚拟地址,属于用户空间;比n12低的虚拟地址,不能用作堆中内存的地址;n12到n11之间的虚拟地址,可以用作堆中内存的地址。
但,多数操作系统已经设定,哪些虚拟地址供内核使用,哪些虚拟地址供用户程序使用,哪些虚拟地址可以供用户空间中的堆中内存使用。
S2:按照划分规则,将用户空间中的堆内存的虚拟地址划分到多个虚拟地址组中。
优选的,将用户空间中的堆内存的虚拟地址划分到多个主虚拟地址组和一个副虚拟地址组中;每个虚拟地址组管理的地址空间大小可以不同,其所含地址也不必是连续的;每个虚拟地址组分配一组锁,用以管理本虚拟地址组内虚拟地址的分配,每组锁含至少一个锁。
对于sys11计算机系统,虚拟地址n11到虚拟地址n12之间的虚拟地址,可以供堆中内存使用,应用本发明时,会将n11到n12之间的虚拟地址划分为若干“虚拟地址组”,一般情况下,每个虚拟地址组所含虚拟地址是连续的,且每个内存页所含虚拟地址不会被分配到两个虚拟地址组内。
当虚拟地址组内的虚拟地址是连续的,且每个内存页都未被划分到两个虚拟地址组时,以下结论是基本正确的:如果两个变量在同一个虚拟地址组内,则他们有可能在同一个页面内,且有可能存放位置相邻很近;如果两个变量不在同一个虚拟地址组内,则他们不可能在同一个页面内。
可以推论:将“宜结合”的小对象分配到同一个虚拟地址组内,且,将“宜分离”的小对象分配到不同的虚拟地址组内,是提高“小对象分配合理性”的有效办法。
而且,给每个虚拟地址组分配一组锁,用以管理,本虚拟地址组内,虚拟地址的分配,相较于,使用一组锁,管理所有用户空间中的堆内存的虚拟地址的分配,造成的资源竞争更为缓和。
综上所述,将虚拟地址分为若干虚拟地址组,有利于提高系统效率。
在具体实施中,从虚拟地址空间中划分出51个虚拟地址组,包括50个主虚拟地址组和1个副虚拟地址组;例如,以sys11为例,对于n12到n11之间的虚拟地址,可以约定划分结果为:
地址0x000100000000至0x00017FFFFFFF是第01个主虚拟地址组;
地址0x000180000000至0x0001FFFFFFFF是第02个主虚拟地址组;
...
地址0x001980000000至0x0019FFFFFFFF是第50个主虚拟地址组;
其他虚拟地址,划入副虚拟地址组undivided。
用序号0至49代表第1到第50个主虚拟地址组,其他序号代表undivided。可以看出,没有内存页属于两个虚拟地址组(包括主虚拟地址组和副虚拟地址组undivided),且每个虚拟地址组(包括主虚拟地址组和副虚拟地址组undivided)所含虚拟地址是连续的。即将堆内存的虚拟地址划分到多个虚拟地址组后,每个内存页均未被划分到两个虚拟地址组,且每个虚拟地址组所含虚拟地址是连续的。
当然,也可以规定划分结果为:
地址0x000100001020至0x000100001100是第01个主虚拟地址组;
地址0x000100001101至0x000100001200是第02个主虚拟地址组;
地址0x000100001201至0x000180000002是第03个主虚拟地址组;
地址0x000180000003至0x000200000002是第04个主虚拟地址组;
...
地址0x001800020000至0x0019FFFFFFFF是第50个主虚拟地址组;
其他虚拟地址,划入副虚拟地址组undivided。
用序号0至49代表第1到第50个主虚拟地址组,其他序号代表副虚拟地址组undivided。可以看出,第01个、第02个、第03个主虚拟地址组分享了同一个页面,而且,副虚拟地址组undivided所含虚拟地址不是连续的。
另外,还可以根据需要,固定地从虚拟地址中分出3个、31个、256个、4000个虚拟地址组等。或者用户在程序启动时,未申请堆中内存前,指定从虚拟地址中划分出多少个虚拟地址组,以及每个虚拟地址组所含虚拟地址。
但无论如何划分,同一个虚拟地址,不能划分到不同的虚拟地址组中。
S3:对所有需要在用户空间中分配的对象进行分组,得到多个对象组以及每个对象组所对应的虚拟地址组;虚拟地址组划分完毕后,不同组的对象,将在相应的虚拟地址组内分配。
分组的具体方法包括:
第一种分组方法:某个线程启动时,在所有虚拟地址组中选择一个虚拟地址组与该线程绑定,并将该线程需要在用户空间的堆内存中分配的所有对象划分到一个对象组,所述对象组对应的虚拟地址组即为与该线程绑定的虚拟地址组。
优选的,某个线程启动时,在所有主虚拟地址组中选择一个主虚拟地址组与该线程绑定,并将该线程需要分配的所有对象划分到一个对象组,所述对象组对应的虚拟地址组即为与该线程绑定的主虚拟地址组,当该线程需要申请内存时,从该线程所绑定的主虚拟地址组中为对象组分配内存,当该线程无法从与其绑定的主虚拟地址组中获得其所需虚拟地址时,根据约定或者参数,尝试从副虚拟地址组中进行分配或者直接返回失败。
当某个线程退出时,认为这个线程不再绑定其曾经绑定的虚拟地址组。
当程序中的线程过于多时,可能出现多个线程共同绑定某个虚拟地址组的情况,但是无论这种情况是否出现,线程选定需要绑定的虚拟地址组时,都从最少被其他线程绑定的若干主虚拟地址组中选择。
如果程序中的线程少于50,则每个线程唯一绑定一个主虚拟地址组,在很多情况下,线程之间因申请内存而造成的资源竞争极大降低。因此,本申请的内存分配方法,在很多情况下,可以有效的降低资源竞争。
还可以采用以下分组方法:
第二种分组方法:将所有对象分为3组,第1组的所有对象的多数位置都具有较高的可能被CPU访问,即所含对象被CPU访问的概率都大于第一阈值;第2组的所有对象的多数位置都具有较低的可能被CPU访问,即所含对象被CPU访问的概率都小于第二阈值;其他对象归入第3组。
指定每个对象组所对应的虚拟地址组,优选的,第1组的所有对象都在第01个虚拟地址组内申请内存空间,第2组的所有对象都在第02个虚拟地址组内申请内存空间,第3组的所有对象都在undivided内申请内存空间。
在采用LRU页面置换算法的系统中,由于第01个虚拟地址组内集中了经常被访问的内存,所以,第01个虚拟地址组中的内存页,可能因经常被访问,而具有更大的可能,驻留在内存中,因此,本申请的内存分配方法,具有较高的CPU访存效率。
在采用LRU页面置换算法的系统中,由于第02个虚拟地址组内集中了不经常被访问的内存,所以,第02个虚拟地址组中的内存页,可能因长期不被访问,而被写到交换分区或者被压缩,因此,本申请的内存分配方法,可能具有较高的内存利用效率。
第三种分组方法:将所有对象划分到大约50个对象组中,每个对象组对应一个虚拟地址组。优选的,从所有小对象中分出50个组,每个组中的小对象都会被高频访问,且适宜放在同一个缓存行(cache line)中。程序员在第1个至第50个虚拟地址组中,分别申请这50组小对象。undivided,用于其他对象的申请。
在所述第二种分组方法中,同样是会被高频访问的两个小对象,可能不会被同时访问,或者会被同时访问,但是不宜放在同一个cache line中。第三种分组方法可以是对第二种分组方法,在某些情况下的优化。
举例介绍第一种和第二种分组方法的具体使用。
例如,设t1、t2是计算机中的两个时刻,Trd1、Trd2是两个线程;Trd1在t1时刻需要分配长度为9个字节的对象obj11,且obj11经常被访问;Trd1在t2时刻需要分配长度为4个字节的对象obj12,且obj12不经常被访问;Trd2在t1时刻需要分配长度为19个字节的对象obj21,且obj21经常被访问;Trd2在t2时刻需要分配长度为44个字节的对象obj22,且obj22不经常被访问。
如果仅用第一种分组方法(即“绑定线程”分配方法),则:obj11、obj12归于一个对象组,可以在第01个虚拟地址组中分配;obj21、obj22归于一个对象组,可以在第02个虚拟地址组中分配。
如果仅用第二种分组方法(即“按访问频率”分配方法),则:obj11、obj21归于一个对象组,可以在第01个虚拟地址组中分配;obj12、obj22归于一个对象组,可以在第02个虚拟地址组中分配。
S4:确定需要申请内存的长度;内存分配器根据需要申请内存的长度,在保证内存地址对齐的前提下,例如在保证自然对齐的前提下,在对应的虚拟地址组内采用内存分配算法为每个对象组寻找空闲内存,并分配内存。不同虚拟地址组采用的内存分配算法可以不同。
内存分配方案可以为:内存分配器锁住某个对象组对应的虚拟地址组的锁;在锁定的虚拟地址组的虚拟地址范围内,采用定制化的或者固定的分配算法,在保证内存地址对齐的前提下,寻找空闲内存;如果内存分配器找到空闲内存,则打开所述虚拟地址组的锁,返回供对象组使用的位置;否则,判定内存分配失败,打开所述虚拟地址组的锁。
结合图2说明,如何在某个虚拟地址组内分配内存。设,所使用的内存分配器为mallocx,内存分配器mallocx的函数原型为void*mallocx(size_t len,int id),其中len为程序所申请内存的长度,即某个对象组的某个对象需要申请内存的长度,id为虚拟地址组的序号,即这个对象组所对应的虚拟地址组的序号。
sys11中,每一块被作为堆中对象而被分配的内存对应一个数据结构,称为header。结构header的成员变量包括used与next:used用于记录,某次内存分配时,实际被标记为已占用的内存的长度;next用于记录,下一个header结构的地址。
内存分配器,可知某个虚拟地址组的第一个header结构的地址,进而可以从第一个header结构开始,遍历这个虚拟地址组的全部header结构。内存分配器还可以通过某个header结构的地址、这个header结构used的数值、这个header结构next的数值,计算出这个header结构与其下一个header结构之间的空闲区域的长度。
每个虚拟地址组所含虚拟地址被使用前,从所述虚拟地址组的起始位置,选择一段,进行私有匿名映射,并在这段范围内,初始化第一个header结构与最后一个header结构。第一个header结构的next指向最后一个header结构,used等于0;最后一个header结构位于已经完成私有匿名映射的虚拟地址的末尾,其next指向空,used等于0。
当需要分配内存时,内存分配器获取,id的数值,以及所需分配的内存的长度len。内存分配器根据id的数值,判定用户所指是所有(51个)虚拟地址组中的哪一个。假设id=0,则内存分配器mallocx,锁住管理第01个主虚拟地址组的锁lock01,然后在虚拟地址范围0x000100000000至0x00017FFFFFFF内,从第一个header结构开始遍历,寻找一块空闲内存,这块空闲内存可以提供长度大于等于sizeof(header)+len(header结构的长度+需要申请内存的长度)的内存,且所提供的内存的起始位置是对齐的。遍历过程中,遍历某个header结构的下一个header结构前,将这个header结构的地址存入last。
如果遍历到最后一个header也未发现合适大小的内存,则在最后一个header之后的虚拟地址中,选择一段虚拟地址added,added的长度合适,且在第01个主虚拟地址组范围内。然后,对added进行私有匿名映射,并在added的末尾初始化一个新的header,将last所指header的next指向这个header。这个header成为新的最后一个header,原来的最后一个header已经变为空闲内存。在last所指header与所述新的最后一个header之间查找所需内存。
如果所述虚拟地址组内未进行私有匿名映射的虚拟地址中,无法提供所述added,则判定分配失败。
如果内存分配器找到空闲内存区域,则打开该虚拟地址组的锁,返回供对象组使用的位置,具体的:内存分配器mallocx将所找到的空闲区域的起始地址存入nStart;nStart到nStart+sizeof(header)-1之间的内存,用于存储header结构;应保证nStart+sizeof(header)所指地址,是内存对齐的;设置该header结构与last所对应的header结构;在这两个header结构设置结束后,mallocx打开该虚拟地址组的锁lock01,将nStart+sizeof(header)的值(供对象组使用的位置)存入nMem,返回nMem。
如果内存分配器mallocx未找到合适内存,则判定本次内存分配失败。
内存分配失败时的处理,当在指定的虚拟地址范围内,分配内存失败时,可以根据约定或者参数采取以下措施:
措施一,直接告知分配失败;
措施二,可以在另一虚拟地址组内分配所需内存,优选的可以在副虚拟地址组undivided内分配所需内存,如果仍然失败,才告知分配失败。
S5:释放内存,内存分配器还用于,在需要释放内存时,采用内存释放算法对本虚拟地址组内虚拟地址进行释放。不同虚拟地址组采用的内存释放算法可以不同。
内存释放方案可以为:判定出待释放内存所在虚拟地址组,然后锁住该虚拟地址组的锁;检测待释放内存所对应的header结构是否是合法的,如果不是,则打开该虚拟地址组的锁,并向主程序发送信息;否则,设置所述header结构,以及相关其他header结构,将标记为已经占用的内存标记为空闲,实现内存释放,并打开该虚拟地址组的锁。
内存分配器,从第一个header结构开始,遍历所有header结构;遍历过程中,遍历某个header结构的下一个header结构前,将这个header结构的地址存入last;如果未找到待释放内存所对应的header结构,则打开该虚拟地址组的锁,并向主程序发送信息;否则,设置待释放内存所对应的header结构以及last所对应的header结构,将标记为已经占用的内存标记为空闲,实现内存释放,并打开该虚拟地址组的锁。
例如,设nMem为0x000100000400,当用户需要释放nMem时,根据nMem的值,判定出nMem在第01个虚拟地址组内,然后锁住lock01,检测nMem-sizeof(header)是否指向合法的header结构,如果不是,则打开lock01,并执行abort函数,否则,通过设置待释放内存所对应的header结构以及last所对应的header结构,将原来标记为已经占用的内存标记为空闲,从而实现内存释放,最后,打开lock01。
程序处理如SIGINT这样的信号时,所进行的过程,可称为信号的处理过程。使用S4、S5所述算法时,为了避免死锁,禁止在信号的处理过程中申请、删除堆中内存。
S4、S5所述内存分配与内存释放算法便于说明,但存在若干问题,如:效率不高,没有删除不必要的映射等。
除了S4、S5所述算法,同一个虚拟地址组还可以根据所分配内存的特点,如长度,而采用不同的算法,进行内存分配与内存释放;而不同的虚拟地址组不必使用相同的算法,进行内存分配与内存释放。某种算法可能特别适合某些对象组,另一种算法可能特别适合另一些对象组,不同的虚拟地址组采用不同的算法有利于发挥每种算法的特长。
综上所述,本申请中的内存分配方法,为提高堆中“小对象分配的合理性”、提高系统效率,提供了便利。由于可以使用多组锁,管理虚拟地址,所以,多线程之间申请虚拟地址时的资源竞争得到一定程度的缓解。
第二方面,本发明还提供了一种内存的分配系统;
一种内存的分配系统,包括:
虚拟地址组划分模块,其被配置为:将用户空间中的堆内存的虚拟地址划分到多个虚拟地址组中;
对象组划分模块,其被配置为:对所有需要在用户空间中分配的对象进行分组,得到多个对象组以及每个对象组所对应的虚拟地址组;
内存分配模块,其被配置为:内存分配器根据需要申请内存的长度,在对应的虚拟地址组内采用内存分配算法为每个对象组分配内存。
内存释放模块,其被配置为:内存分配器在需要释放内存时,采用内存释放算法对本虚拟地址组内虚拟地址进行释放。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种内存的分配方法,其特征在于,包括:
将用户空间中的堆内存的虚拟地址划分到多个虚拟地址组中;
对所有需要在用户空间中分配的对象进行分组,得到多个对象组以及每个对象组所对应的虚拟地址组;
内存分配器根据需要申请内存的长度,在对应的虚拟地址组内采用内存分配算法为每个对象组分配内存。
2.如权利要求1所述的一种内存的分配方法,其特征在于,所述内存分配器在保证内存地址对齐的前提下,寻找合适大小的空闲内存;如果内存分配器找到合适大小的空闲内存,则返回供对象组使用的位置;否则,判定内存分配失败。
3.如权利要求2所述的一种内存的分配方法,其特征在于,判定内存分配失败后,直接告知分配失败。
4.如权利要求2所述的一种内存的分配方法,其特征在于,判定内存分配失败后,在另一个虚拟地址组内分配所需内存,如果仍然失败,才告知分配失败。
5.如权利要求1所述的一种内存的分配方法,其特征在于,所述内存分配器还用于,在需要释放内存时,采用内存释放算法对虚拟地址组内虚拟地址进行释放。
6.如权利要求1所述的一种内存的分配方法,其特征在于,不同虚拟地址组采用的内存分配算法和释放内存算法可以不同。
7.如权利要求1所述的一种内存的分配方法,其特征在于,每个虚拟地址组分配一组锁,用以管理虚拟地址组内虚拟地址的分配与释放,每组锁含至少一个锁。
8.如权利要求1所述的一种内存的分配方法,其特征在于,所述分组的具体方法为:某个线程启动时,在所有虚拟地址组中选择一个虚拟地址组与该线程绑定,并将该线程需要在用户空间的堆内存中分配的所有对象划分到一个对象组,所述对象组对应的虚拟地址组即为与该线程绑定的虚拟地址组。
9.一种内存的分配系统,其特征在于,包括:
虚拟地址组划分模块,其被配置为:将用户空间中的堆内存的虚拟地址划分到多个虚拟地址组中;
对象组划分模块,其被配置为:对所有需要在用户空间中分配的对象进行分组,得到多个对象组以及每个对象组所对应的虚拟地址组;
内存分配模块,其被配置为:内存分配器根据需要申请内存的长度,在对应的虚拟地址组内采用内存分配算法为每个对象组分配内存。
10.如权利要求9所述的一种内存的分配系统,其特征在于,还包括内存释放模块,其被配置为:内存分配器在需要释放内存时,采用内存释放算法对本虚拟地址组内虚拟地址进行释放。
CN202111031787.4A 2021-09-03 2021-09-03 一种内存的分配方法及系统 Pending CN114116194A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111031787.4A CN114116194A (zh) 2021-09-03 2021-09-03 一种内存的分配方法及系统
PCT/CN2022/112800 WO2023029982A1 (zh) 2021-09-03 2022-08-16 一种内存的分配方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111031787.4A CN114116194A (zh) 2021-09-03 2021-09-03 一种内存的分配方法及系统

Publications (1)

Publication Number Publication Date
CN114116194A true CN114116194A (zh) 2022-03-01

Family

ID=80441193

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111031787.4A Pending CN114116194A (zh) 2021-09-03 2021-09-03 一种内存的分配方法及系统

Country Status (2)

Country Link
CN (1) CN114116194A (zh)
WO (1) WO2023029982A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023029982A1 (zh) * 2021-09-03 2023-03-09 济南外部指针科技有限公司 一种内存的分配方法及系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050193169A1 (en) * 2004-03-01 2005-09-01 Ahluwalia Manish K. Memory management
CN105468542B (zh) * 2014-09-03 2019-03-26 杭州华为数字技术有限公司 地址分配方法及装置
CN110928803B (zh) * 2018-09-19 2023-04-25 阿里巴巴集团控股有限公司 一种内存管理方法及装置
CN112817756B (zh) * 2021-01-25 2022-05-27 上海壁仞智能科技有限公司 计算机可读取存储介质、内存管理单元的虚拟化方法和装置
CN114116194A (zh) * 2021-09-03 2022-03-01 济南外部指针科技有限公司 一种内存的分配方法及系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023029982A1 (zh) * 2021-09-03 2023-03-09 济南外部指针科技有限公司 一种内存的分配方法及系统

Also Published As

Publication number Publication date
WO2023029982A1 (zh) 2023-03-09

Similar Documents

Publication Publication Date Title
US7716448B2 (en) Page oriented memory management
US8095736B2 (en) Methods and systems for dynamic cache partitioning for distributed applications operating on multiprocessor architectures
US5784699A (en) Dynamic memory allocation in a computer using a bit map index
US6205519B1 (en) Cache management for a multi-threaded processor
CN107844267B (zh) 缓冲区分配和存储器管理
US5897660A (en) Method for managing free physical pages that reduces trashing to improve system performance
US20080162863A1 (en) Bucket based memory allocation
US20130013884A1 (en) Memory Management System
US10824555B2 (en) Method and system for flash-aware heap memory management wherein responsive to a page fault, mapping a physical page (of a logical segment) that was previously reserved in response to another page fault for another page in the first logical segment
EP4361824A2 (en) In-memory distributed cache
CN110727517A (zh) 一种基于分区设计的内存分配方法和装置
US8028113B2 (en) Methods and systems for deadlock-free allocation of memory
WO2024099448A1 (zh) 内存释放、内存恢复方法、装置、计算机设备及存储介质
US7711921B2 (en) Page oriented memory management
CN115617542A (zh) 内存交换方法、装置、计算机设备及存储介质
CN114116194A (zh) 一种内存的分配方法及系统
US7197620B1 (en) Sparse matrix paging system
EP0919927A2 (en) Dynamic memory allocation technique for maintaining an even distribution of cache page addresses within an address space
US7840772B2 (en) Physical memory control using memory classes
CN116225693A (zh) 元数据管理方法、装置、计算机设备及存储介质
US11474938B2 (en) Data storage system with multiple-size object allocator for disk cache
CN114518962A (zh) 内存的管理方法及装置
CN111026680A (zh) 将第一标识符映射到第二标识符
US12008248B2 (en) Systems, methods, and devices for utilization aware memory allocation
CN117435352B (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