[发明专利]内存分配的方法及装置有效
申请号: | 201210316944.0 | 申请日: | 2012-08-31 |
公开(公告)号: | CN102866954A | 公开(公告)日: | 2013-01-09 |
发明(设计)人: | 雷镇 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F12/06 | 分类号: | G06F12/06 |
代理公司: | 北京龙双利达知识产权代理有限公司 11329 | 代理人: | 王君;肖鹂 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 内存 分配 方法 装置 | ||
技术领域
本发明涉及计算机领域,具体而言,涉及内存分配的方法及装置。
背景技术
在如软件编程的计算机应用中,经常涉及内存资源的动态申请和释放。比如创建一个线程时需要为该线程分配栈空间,当该线程被删除时需要回收对应的栈空间。关于内存管理,业界已存在多种算法,各有其优缺点。评价一款内存算法的优劣,主要有性能、利用率、可靠性、可格式化等要素。
内存算法主要分为静态内存算法、块内存算法、分割合并式内存算法等几大类。静态内存算法性能很高,但只能申请内存资源而不能释放内存资源,一般用在初始化阶段。块内存算法性能也很高,可动态申请或释放内存资源,但其可分配的内存资源的大小受到内存块的大小的限制,而且利用率也比较差。分割合并式内存算法可满足任意大小的内存资源的申请或释放,利用率也高,但现有算法的性能比较差。
例如,一种块内存算法是指将内存池等分成若干个页:申请内存资源时,若对应内存块的块类型的链表不为空则从该链表中摘取一个内存块,否则申请一个空闲的内存页,将该空闲的内存页按对应的内存块的大小进行等分,释放内存资源时,若内存页中的所有内存块都空闲,则回收该内存页并挂入空闲的内存页的链表。但是,该算法会导致页内碎片与块内碎片,并且最大可申请的内存资源的大小不能超过最大内存块的大小。
例如,另一种块内存算法是指每个内存块的块类型都维护一个空闲链表:申请内存资源时,先检查对应的链表是否为空,如果不为空则从链表中摘取一个内存块,否则根据分配指针再划分一个当前大小的内存块;释放内存资源时,直接将当前释放的内存块挂到对应块类型的空闲链表中。但是,该算法容易导致块内碎片,最大可申请的内存资源的大小不能超过最大内存块的大小,并且已被划分出的内存块不能格式化为其它块类型。
例如,一种分割合并式内存算法是指可按任意大小划分内存块,并且当内存块被释放时可以对前后紧邻的空闲内存块进行合并。在该算法中,为了迅速查找到适合的内存块,将所有空闲内存块维护成一个平衡二叉树。但是,该算法涉及二叉树结点的申请、释放、查找和平衡操作,因此性能比较差。
发明内容
本发明实施例提出了内存分配的方法及装置,旨在解决现有内存分配中无法兼具高性能、高利用率和申请任意内存大小的问题。
一方面,提出了一种内存分配的方法,包括:将空闲内存块串接到相应的空闲链表中,所述空闲链表的头指针维护在大小为N的空闲链表头数组中,所述空闲链表头数组中头指针指向的相应的空闲链表的索引为n,其中所述N为正整数,所述n为0至N-1的整数,索引为n的空闲链表用于串接大小为X的空闲内存块,其中X大于或等于2n且小于或等于2n+1-1;当申请的内存的大小为Y时,从索引为m+1的空闲链表开始、在索引为m+1的空闲链表与索引为n的空闲链表之间确定第一个非空的空闲链表,其中所述m小于或等于N-1,Y大于或等于2m且小于或等于2m+1-1;提取所述第一个非空的空闲链表中的第一个空闲内存块,按照所述申请的内存的大小分配第一个空闲内存块。
在第一方面的第一种可能的实现方式中,所述当申请的内存的大小为Y时,从索引为m+1的空闲链表开始、在索引为m+1的空闲链表与索引为n的空闲链表之间确定第一个非空的空闲链表包括:当申请的内存的大小在2m至2m+1-1之间时,从索引为m+1的空闲链表开始、在索引为m+1的空闲链表与索引为n的空闲链表之间,通过与所述空闲链表头数组对应的位图确定第一个非空的空闲链表,其中所述位图中的每个位标示所述空闲链表头数组中对应的空闲链表是否为空。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,还包括:若所述第一个空闲内存块中存在未分配的剩余空闲内存,根据所述剩余空闲内存的大小将所述剩余空闲内存对应的空闲内存块串接到相应的空闲链表中。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述将空闲内存块串接到相应的空闲链表中包括:以双向链表的形式将所述空闲内存块串接到空闲链表中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210316944.0/2.html,转载请声明来源钻瓜专利网。