[发明专利]一种内存管理方法及系统无效
申请号: | 200710176137.2 | 申请日: | 2007-10-19 |
公开(公告)号: | CN101414281A | 公开(公告)日: | 2009-04-22 |
发明(设计)人: | 高攀 | 申请(专利权)人: | 大唐移动通信设备有限公司;上海大唐移动通信设备有限公司 |
主分类号: | G06F12/02 | 分类号: | G06F12/02 |
代理公司: | 北京信远达知识产权代理事务所(普通合伙) | 代理人: | 王学强 |
地址: | 100083*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 管理 方法 系统 | ||
技术领域
本发明涉及数据通信技术领域,尤其涉及一种内存管理方法及系统。
背景技术
内存管理是目前数据通信中一项重要的工作。由于内存的使用频率很高,因此,内存的管理使用是否有效直接影响到系统的性能是否高校。
目前,现有技术中内存的管理主要有三种方法:字节内存池(Byte Pool)内存管理、块内存池(Block Pool)内存管理和片内存池(Slab Pool)内存管理。
Byte Pool内存管理是把给定的内存区视作一个连续的、均匀的空间,根据某种方式(最优匹配、最差匹配、首次匹配等)从中划分一段空间给请求者;但是,Pool内存管理缺点也很明显,即易于产生内存碎片:
如图1所示,比如一个18单位的内存系统中,假设使用者只申请3单位或者2单位的内存,其中阴影部分表示已分配的内存;一开始内存使用情况图中A所示;首先使用者申请6个3单位内存,内存使用情况如图中B所示;随后使用者释放最后一块3单位的内存,再申请2单位内存,则内存使用情况如图中C所示;重复前一步骤多次,系统的内存使用情况如图中D所示;至此,系统中虽然总计有6单位的空闲内存,但是不能满足使用者进一步的内存申请。在实际情况中,甚至曾遇到过这样的情况:总计有1M空闲内存的Byte Pool内存池中也无法分配几十K的空间;
由于Byte Pool内存管理方法过于简单,几乎不对内存做任何统筹管理,从而在系统长时间运行后,就必然导致内存碎片,且几乎不能恢复;最终,将导致当内存总的空闲空间远远大于请求的空间时,系统也无法正常运行,从而系统崩溃或者功能性异常。
为了改善Byte Pool的内存碎片问题,实践中也提出了一种简单的BlockPool内存管理方法,其实现如下:
一个Block Pool由若干个等大小的内存Block构成;对小于等于单位内存Block的内存申请,则分配以一个完整的Block,多个不同单元大小的BlockPool配合则可以可靠的避免内存碎片,比如1个8M内存空间中,规划出512K作为小于等于128字节的Block Pool,规划出1M作为小于等于1K的BlockPool,规划出2M的空间作为小于等于4K的Block Pool等;但这一方法对于内存的浪费严重,且很不灵活,性价比很低,不能满足低成本或者高复杂度的系统的需求。
为了解决内存碎片问题,现有技术中还存在一种Slab内存管理方法。经过实践证明,Slab内存管理方法相对上述两种方法能够比较有效的解决内存碎片问题,但是,Slab的确定也很明显:
1.实现较为复杂
Slab内存管理机制较为复杂,其代码量对于系统来说偏多,实现和维护都较为困难;此外,Slab通常配合伙伴系统实现,而伙伴系统决定了Slab管理器中不能分配目前一半以上的物理内存;举例来说,总计4M的内存中,除去必要的一部分内存外,最多只能分配2M空间,不能分配2.5M或者3M或者3.5M的空间;
2.内存浪费较为严重
Slab对内存的浪费源于两方面:
首先,源于Slab的通用高速缓存的浪费:slab的通用高速缓存大小从32bytes开始,以2n的方式递增到8K,当某个申请者申请1K+4bytes时,Slab会实际分配以2K空间,这样就会导致浪费1K-4bytes的内存空间。
其次,源于内存申请释放的随机性:假定某个时刻,在某个32bytes的高速缓冲中分配了数十个页面;一开始,这数十个页面的内存也许都被分配殆尽,但是一段时间后,有可能每个page中只有一个缓存项在被使用;而同时,系统中出现了大量的64bytes、128bytes的请求,但是Slab不能在几乎全空的32bytes的高速缓冲中分配这些请求的空间,这样,32bytes高速缓存所占用的page就被极大的浪费了;
因此,上述现有技术中的几种方法要么极易产生内存碎片、要么内存空间浪费严重,其都没有从根本上解决内存碎片的问题。
发明内容
有鉴于此,本发明解决的问题是提供一种内存管理方法及系统,可以有效的解决大量内存碎片给系统带来的性能影响,并且简单易行。
为解决上述问题,本发明提供的技术方案如下:
一种内存管理方法,该方法包括:
根据内存分配申请比较申请分配的内存与预设的阈值的大小;
当所述申请分配的内存小于所述阈值时,在内存一端的内存池内为用户分配所述申请分配的内存;否则,
在内存的另一端直接为用户分配所述申请分配的内存。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于大唐移动通信设备有限公司;上海大唐移动通信设备有限公司,未经大唐移动通信设备有限公司;上海大唐移动通信设备有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710176137.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:车载高压储氢瓶用一体式瓶阀
- 下一篇:油膜轴承用缓冲环及其制备方法