一种内存管理方法及系统的制作方法

文档序号:6613636阅读:224来源:国知局
专利名称:一种内存管理方法及系统的制作方法
技术领域
本发明涉及数据通信技术领域,尤其涉及一种内存管理方法及系统。
背景技术
内存管理是目前数据通信中 一项重要的工作。由于内存的使用频率很高, 因此,内存的管理使用是否有效直接影响到系统的性能是否高校。
目前,现有技术中内存的管理主要有三种方法字节内存池(Byte Pool) 内存管理、块内存池(Block Pool)内存管理和片内存池(Slab Pool)内存管理。
BytePool内存管理是把给定的内存区视作一个连续的、均匀的空间,根 据某种方式(最优匹配、最差匹配、首次匹配等)从中划分一段空间给请求 者;但是,Pool内存管理缺点也很明显,即易于产生内存碎片
如图1所示,比如一个18单位的内存系统中,假设使用者只申请3单位或 者2单位的内存,其中阴影部分表示已分配的内存; 一开始内存使用情况图中 A所示;首先使用者申请6个3单位内存,内存使用情况如图中B所示;随后使 用者释放最后一块3单位的内存,再申请2单位内存,则内存使用情况如图中C 所示;重复前一步骤多次,系统的内存使用情况如图中D所示;至此,系统中 虽然总计有6单位的空闲内存,但是不能满足使用者进一步的内存申请。在实 际情况中,甚至曾遇到过这样的情况总计有1M空闲内存的BytePool内存池 中也无法分配几十K的空间;
由于Byte Pool内存管理方法过于简单,几乎不对内存做任何统筹管理, 从而在系统长时间运行后,就必然导致内存碎片,且几乎不能恢复;最终,将导致当内存总的空闲空间远远大于请求的空间时,系统也无法正常运行, 从而系统崩溃或者功能性异常。
为了改善Byte Pool的内存碎片问题,实践中也提出了一种简单的Block Pool内存管理方法,其实现如下
一个BlockPool由若干个等大小的内存Block构成;对小于等于单位内存 Block的内存申请,则分配以一个完整的Block,多个不同单元大小的Block Pool配合则可以可靠的避免内存碎片,比如1个8M内存空间中,规划出512K 作为小于等于128字节的Block Pool,规划出1 M作为小于等于1 K的Block Pool,规划出2M的空间作为小于等于4K的BlockPool等;但这一方法对于内 存的浪费严重,且很不灵活,性价比很低,不能满足低成本或者高复杂度的 系统的需求。
为了解决内存碎片问题,现有技术中还存在一种Slab内存管理方法。经 过实践证明,Slab内存管理方法相对上述两种方法能够比较有效的解决内存 碎片问题,但是,Slab的确定也很明显
1. 实现较为复杂
Slab内存管理机制较为复杂,其代码量对于系统来说偏多,实现和维护 都较为困难;此外,Slab通常配合伙伴系统实现,而伙伴系统决定了Slab管 理器中不能分配目前一半以上的物理内存;举例来说,总计4M的内存中,除 去必要的一部分内存外,最多只能分配2M空间,不能分配2.5M或者3M或者 3.5M的空间;
2. 内存浪费较为严重 Slab对内存的浪费源于两方面
首先,源于Slab的通用高速缓存的浪费slab的通用高速緩存大小从 32bytes开始,以2n的方式递增到8K,当某个申请者申请1K + 4 bytes时,Slab 会实际分配以2K空间,这样就会导致浪费1K-4 bytes的内存空间。其次,源于内存申请释放的随机性假定某个时刻,在某个32bytes的高 速緩冲中分配了数十个页面; 一开始,这数十个页面的内存也许都被分配殆 尽,但是一段时间后,有可能每个page中只有一个緩存项在被使用;而同时, 系统中出现了大量的64bytes、 128bytes的请求,但是Slab不能在几乎全空的 32bytes的高速緩冲中分配这些请求的空间,这样,32bytes高速緩存所占用 的page就被极大的浪费了 ;
因此,上述现有技术中的几种方法要么极易产生内存碎片、要么内存空 间浪费严重,其都没有从根本上解决内存碎片的问题。

发明内容
有鉴于此,本发明解决的问题是提供一种内存管理方法及系统,可以有 效的解决大量内存碎片给系统带来的性能影响,并且简单易行。, 为解决上述问题,本发明提供的技术方案如下
一种内存管理方法,该方法包括
根据内存分配申请比较申请分配的内存与预设的阈值的大小;
当所述申请分配的内存小于所述阈值时,在内存一端的内存池内为用户 分配所述申请分配的内存;否则,
在内存的另一端直接为用户分配所述申请分配的内存。 相应的,该方法进一步包括
当该内存中不存在内存池时,先在该内存的一端构建内存池,在该内存 池内为用户分配小于所述阈值的申请分配的内存。 相应的,该方法进一步包括
当该内存中已存在内存池,并当所述申请分配的内存不大于内存池中可 分配的内存时,直4妄在该内存池中分配所述申请分配的内存;否则,构建新的内存池分配所述申请分配的内存。
相应的,所述内存池由连续的物理页面构成,且该内存池内部采用字节 内存池管理内存。
相应的,所述内存池大小根据系统内存和申请分配的内存情况设定不同 数值。
相应的,所述内存池大小为64K。
一种内存管理系统,该系统包括比较模块和分配模块;
所述比较模块用于根据内存分配申请比较申请分配的内存与预设的阈值 的大小;
所述分配模块用于当所述申请分配的内存小于所述阈值时,在内存一端 的内存池内为用户分配所述申请分配的内存;否则,在内存的另一端直"l妻为 用户分配所述申请分配的内存。'
相应的,所述分配模块进一步包括
构建内存池^t块,用于当该内存中不存在内存池时,先在该内存的一端 构建内存池,在该内存池内为用户分配小于所述阈值的申请分配的内存。
相应的,所述分配模块进一步包括
判断模块,用于当该内存中已存在内存池时判断所述申请分配的内存是 否不大于所述内存池中可分配的内存,如果是,则直接在该内存池中分配所 述申请分配的内存;否则,指示所述构建模块构建新的内存池分配所述申请 分配的内存。
可以看出,采用本发明的方法和系统,通过在内存中构建内存池用来分 配比较小的内存申请,以把内存碎片局部化,能够有效的改善内存管理,减 緩了内存碎片对系统的冲击,同时具有较高的空间和时间效率;并且简单、 易于实现和维护、节省空间、扩展性也很强。


图1是现有技术中字节内存池内存管理方法的内存分配情况示意图2是本发明方法的流程示意图3是本发明方法实施例的流程示意图4是本发明系统的示意框图。
具体实施例方式
本发明的基本思想在于在内存中构建内存池用来分配比较小的内存申 请,以把内存碎片局部化,减緩了内存碎片对系统的冲击,并且空间利用率 ;f艮高,几乎没有内存浪费。
为此,本发明提供一种内存管理方法,如图2所示,该方法包括 步骤201:根据内存分配申请比较申请分配的内存与预设的阈值的大小; 步骤202:当所述申请分配的内存小于所述阈值时,在内存一端的内存 池内为用户分配所述申请分配的内存;否则,
步骤203:在内存的另 一端直接为用户分配所述申请分配的内存。 具体的,该方法进一步包括
当该内存中不存在内存池时,先在该内存的一端构建内存池,在该内存 池内为用户分配小于所述阈值的申请分配的内存;
当该内存中已存在内存池,并当所述申请分配的内存不大于内存池中可 分配的内存时,直接在该内存池中分配所述申请分配的内存;否则,构建新 的内存池分配所述申请分配的内存。
为了使本领域技术人员更好的理解本发明,下面结合附图和具体实施例对本发明的方法进行详细说明,如图3所示;
S301:接收内存分配申请,并比较该申请中申请分配的内存与预设的阈 值间的大小;
所述阈值的大小可以根据系统的不同、用户的数量等情况进行不同的设 定,在此不再赘述。
S302:当所述申请分配的内存小于所述阈值时,如果此时内存中不存在 内存池,则执行S304;否则,执行S305;
根据比较结果得知申请分配的内存小于预设的阈值时,表明此时为小内 存申请;此时,先查看内存中是否已存在内存池如果是第一次申请内存分 配或已分配的内存已经释放了 ,则此时内存中并不存在内存池;
S303:当所述申请分配的内存不小于所述阈值时,在内存的另一端分配 该申请分配的内存;
根据比较结果得知申请分配的内存不小于预设的阈值时,表明此时为大 内存申请,则此时直接分配以若干连续页面用以分配申请的内存;比如,申 请125K的内存空间,因通常系统的一个页面的大小为4K,所以可直接分配 32个连续的内存页面用以分配申请的内存;并且,该连续页面优先从内存的 另一端开始分配;
此外,当释放内存时,为大内存块分配的内存在内存区中直接释放;
S304:当内存中不存在内存池时,先在该内存的一端构建内存池,在该 内存池内为用户分配小于所述阈值的申请分配的内存;
具体的,当内存区中不存在内存池时,先在相对于分配大内存的内存区 的另外一端构建一内存池,用来分配小内存;此外,该内存池可由若干连续 的物理页面Page构成,其内部采用Byte Pool进行内存管理,当然也可以釆 用其他内存管理方法管理内存池中的小内存,在此不再赘述;而在无Page的系统中,Page可以对应于大小于Page相同、且边界与页面对齐的块;通 常一个页面的大小为4K,而内存池通常为16个页面,大小为64K,当然也 可以根据系统内存和申请分配的内存情况设定不同数值,在此不再赘述;
本实施例中,通过在内存中构建内存池来分配小内存,把内存碎片局部 化,减緩了内存碎片对系统的冲击,尽管在内存池中也存在内存碎片,但是 这些内存碎片并没有导致整个系统空间被分隔,从而系统空间在很长时间之 后仍然能很从容的分配一块大内存。
S305:当内存中已存在内存池时,先查看所述申请分配的内存是否不大 于所述内存池中未被分配的内存,如果是,则执行S306;否则,执行S307;
直接在该内存池中分配所述申请分配的内存;
当获知请求分配的内存为小内存,并且以现有内存池中的内存足以满足 小内存的要求时,则直接在该内存池中分配所述申请分配的内存;
建新的内存池,用来分配小内存;
当获知请求分配的内存为小内存,并且以现有内存池中的内存不足以满
内存时,从临近已有的内存池的内存区中申请若干连续页面,并基于这些页 面构建一个新的内存池,在从该新的内存池中分配前述小内存;
此外,如果内存区中没有所要求大小的连续页面,则从内存区中请求一 段最大的空闲内存用来分配所述小内存;当然,系统并不关心所述内存池的 大小,因此,在系统内存较为紧张的情况下,可以构建出一个比较小的内存 池以满足分配小内存的要求,这样则对系统没有任何额外的负担。
在本实施例中,对于请求分配的小内存来说,尽可能从已有的、靠边的内存池中分配,这样可以尽可能的预留出连续的内存;同时,内存池和为大
内存分配的内存段尽可能从内存中的两端向中央伸长。
除此之外,当释放内存时,如果所述请求分配的内存是从构建的内存池
中分配的,则此时从该内存池中释放已分配的内存;并且当所述内存池中的 所有内存都已释放则将此内存池销毁,将所占用的内存归还给内存区。
可以看出,采用本发明的方法,对小内存几乎没有浪费,能够有效的改 善内存管理,局部化内存碎片,减緩了内存碎片对系统的沖击,同时具有较 高的空间和时间效率。
'a可。
是可以通过程序指令相关的硬件来完成,且所述的程序存储于特定存储介质 中。
基于上述思想,本发明还提供一种内存管理系统,如图4所示,该系统 包括比较模块401和分配模块402;
所述比较模块401用于根据内存分配申请比较申请分配的内存与预设的 阈值的大小;
所述分配模块402用于当所述申请分配的内存小于所述阈值时,在内存 一端的内存池内为用户分配所述申请分配的内存;否则,在内存的另一端直 接为用户分配所述申请分配的内存。
此外,所述分配^f莫块402进一步包括
构建内存池才莫块,用于当该内存中不存在内存池时,先在该内存的一端 构建内存池,在该内存池内为用户分配小于所述阈值的申请分配的内存。
除此之外,所述分配模块402还可进一步包括
判断模块,用于当该内存中已存在内存池时判断所述申请分配的内存是 否不大于所述内存池中可分配的内存,如果是,则直接在该内存池中分配所述申请分配的内存;否则,指示所述构建模块构建新的内存池分配所述申请 分配的内存。
可以看出,采用本发明的系统,对内存碎片进行局部化处理,减緩了内
存碎片对系统的冲击,同时具有较高的空间和时间效率;并且简单、易于实 现和维护、节省空间、扩展性也^[艮强。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本 发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在 本发明的保护范围之内。
权利要求
1、一种内存管理方法,其特征在于,该方法包括根据内存分配申请比较申请分配的内存与预设的阈值的大小;当所述申请分配的内存小于所述阈值时,在内存一端的内存池内为用户分配所述申请分配的内存;否则,在内存的另一端直接为用户分配所述申请分配的内存。
2、 根据权利要求1所述的方法,其特征在于,该方法进一步包括当该内存中不存在内存池时,先在该内存的一端构建内存池,在该内存 池内为用户分配小于所述阈值的申请分配的内存。
3、 根据权利要求2所述的方法,其特征在于,该方法进一步包括当该内存中已存在内存池,并当所述申请分配的内存不大于内存池中可 分配的内存时,直接在该内存池中分配所述申请分配的内存;否则,构建新 的内存池分配所述申请分配的内存。
4、 根据权利要求1至3任意一项所述的方法,其特征在于所述内存池由连续的物理页面构成,且该内存池内部采用字节内存池管 理内存。
5、 根据权利要求4所述的方法,其特征在于所述内存池大小才艮据系统内存和申请分配的内存情况设定不同数值。
6、 根据权利要求5所述的方法,其特征在于 所述内存池大小为64K。
7、 一种内存管理系统,其特征在于,该系统包括比较模块和分配模块;所述比较模块用于根据内存分配申请比较申请分配的内存与预设的阈值 的大小;所述分配模块用于当所述申请分配的内存小于所述阈值时,在内存一端的内存池内为用户分配所述申请分配的内存;否则,在内存的另一端直4^为 用户分配所述申请分配的内存。
8、 根据权利要求7所述的系统,其特征在于,所述分配模块进一步包括构建内存池才莫块,用于当该内存中不存在内存池时,先在该内存的一端 构建内存池,在该内存池内为用户分配小于所述阈值的申请分配的内存。
9、 根据权利要求8所述的系统,其特征在于,所述分配模块进一步包括判断模块,用于当该内存中已存在内存池时判断所述申请分配的内存是 否不大于所述内存池中可分配的内存,如果是,则直"^妄在该内存池中分配所 述申请分配的内存;否则,指示所述构建模块构建新的内存池分配所述申请 分配的内存。
全文摘要
本发明提供一种内存管理方法,该方法包括根据内存分配申请比较申请分配的内存与预设的阈值的大小;当所述申请分配的内存小于所述阈值时,在内存一端的内存池内为用户分配所述申请分配的内存;否则,在内存的另一端直接为用户分配所述申请分配的内存。本发明还提供一种内存管理系统。采用本发明的方法和系统,通过在内存中构建内存池用来分配比较小的内存申请,以把内存碎片局部化,能够有效的改善内存管理,减缓了内存碎片对系统的冲击,同时具有较高的空间和时间效率;并且简单、易于实现和维护、节省空间、扩展性也很强。
文档编号G06F12/02GK101414281SQ20071017613
公开日2009年4月22日 申请日期2007年10月19日 优先权日2007年10月19日
发明者攀 高 申请人:大唐移动通信设备有限公司;上海大唐移动通信设备有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1