[发明专利]内存分配方法有效
申请号: | 201010550117.9 | 申请日: | 2010-11-18 |
公开(公告)号: | CN102012870A | 公开(公告)日: | 2011-04-13 |
发明(设计)人: | 胡事民;阎栋 | 申请(专利权)人: | 清华大学 |
主分类号: | G06F12/06 | 分类号: | G06F12/06 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹 |
地址: | 100084 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 内存 分配 方法 | ||
技术领域
本发明涉及计算机科学技术领域,特别涉及一种内存分配方法。
背景技术
随着计算机硬件制造技术的不断发展,市场上不仅出现了速度更快容量更大的内存,越来越多的应用也依赖于操作系统对内存的良好管理才能发挥作用。伴随着操作系统从单用户单任务发展到多任务多用户,内存管理也从最早的固定区域内存划分(即现在的嵌入式系统中的内存池管理方法)发展到内存管理单元(Memory ManagementUnit,MMU)出现之后所支持的段页式的内存管理,再到虚拟内存的概念,内存管理不断提供更强更灵活的服务给用户。
在基于段页式的的内存分配方法中无论是较为早期的buddy算法还是基于buddy的slab算法,都是将内存划分为事先约定好的2的幂次方大小的内存块,以此为基础再进行内存的分配和回收。而用户通常所申请的内存区域往往并不是2的幂次方,这样就不可避免的产生大量的块内碎片,从而降低了内存的使用效率。另一方面在有些应用场景下,用户可能希望系统分配指定地址的内存,而buddy和slab限于所使用的内存组织方式很难提供这样的服务。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何提出一种内存分配方法解决传统内存管理方法所存在容易产生碎片和无法分配指定区域内存的问题。
(二)技术方案
为解决上述技术问题,本发明提供了一种内存分配方法,包括以下步骤:
S1:将内存划分为固定大小的内存块,为所述内存建立一棵线段树,所述线段树的叶节点对应所述固定大小的内存块,从内存起始位开始,以每两个相邻叶节点为子节点依次创建一个内部节点,以相邻两个内部节点为子节点创建上一层内部节点,依次向上递归直到创建出一个根节点,所述每个节点记录如下信息,并在分配时初始化所述信息:
所述节点对应的内存区域的起始和终止端点:start和end;
所述节点对应的内存区域内最大连续空闲内存的长度max_blank_length和其起始位置location;
所述节点对应的内存区域内由起始端点向右的最长连续空闲内存长度left_blank_length,由终止端点向左的最长连续空闲内存长度right_blank_length;
S2:响应内核或是应用程序申请内存的请求,根据所述线段树分配申请的内存;
S3:根据所述线段树回收内核或是应用程序释放的内存。
其中,所述步骤S1具体包括:
统计所述内存的长度;
根节点的start和end分别为所述内存的起始位置和终止位置,初始情况下默认整个内存区域全部为空闲状态,max_blank_length为内存区域的长度,location等于start,left_blank_length等于right_blank_length等于max_blank_length;
自顶向下,根据每个节点的父节点信息及本身所在左子树或右子树,采用递归方式初始化每个节点的start、end、max_blank_length、location、left_blank_length和right_blank_length,至叶子节点为止。
其中,所述步骤S2具体包括:
查找根节点的所述信息,若申请的内存区域长度mem_length大于根节点的max_blank_length返回错误信息,否则,返回根节点中的location,记为start_location,则要申请的内存区域为[start_location,start_location+mem_length);
从根节点开始依次向下递归处理上一步得到的[start_location,start_location+mem_length),若start_location=start且start_location+mem_length=end,当前节点所对应的内存区域就是所要处理的区间,则当前节点的start和end不变,max_blank_length置零location置-1代表此节点所对应的内存区域已经全部都被分配,left_blank_length和right_blank_length也均置零;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010550117.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:计算机集群管理方法、装置和系统
- 下一篇:基于视觉感知特性的数字图像水印方法