[发明专利]解决频繁分配释放同等大小内存的方法有效
申请号: | 200510060795.6 | 申请日: | 2005-09-16 |
公开(公告)号: | CN1740975A | 公开(公告)日: | 2006-03-01 |
发明(设计)人: | 卜佳俊;陈纯;方丰平;柯化成 | 申请(专利权)人: | 浙江大学 |
主分类号: | G06F9/46 | 分类号: | G06F9/46;G06F12/02 |
代理公司: | 杭州求是专利事务所有限公司 | 代理人: | 林怀禹 |
地址: | 310027浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种解决频繁分配释放同等大小内存的方法。本发明的方法通过维护一个可以扩展的内存池的链表,用函数来动态控制内存池链表中内存池的大小和内存池的数量。用链表来管理内存池,避免了一般内存池分配方式在内存池不够大的情况下,需要扩展原来的内存池,不能扩展的时候不得不重新分配更大的内存块作为内存池,导致内存碎片增多,不断的扩展内存池又导致了频繁分配内存的情况。用函数来控制分配的内存池的大小和数量,使得应用程序能更有效的利用内存和节约内存,提高应用程序内存的可定制性。 | ||
搜索关键词: | 解决 频繁 分配 释放 同等 大小 内存 方法 | ||
【主权项】:
1一种解决频繁分配释放同等大小内存的方法,其特征在于:1)记频繁分配释放同等大小内存的大小为msize,内存池链表的指针为plist,第n个内存池为mpn,内存池的起始地址为psn,结束地址为pen,内存池的第一个free标志的内存在该内存池的位置为freen;2)定义一个函数f(n)用来决定第n个内存池的大小,f(n)值等于0或者小于0,则表示应用程序设定了大小为msize的内存块的个数上限,大小为前面n-1次分配的内存块的个数的和;3)当应用程序需要大小为msize的内存时,则从内存池链表的第一个内存池开始,逐个判断内存池的freen是否大于f(n);如果freen小于等于f(n),表示该内存池有空闲内存可以分配,返回该内存池;如果freen大于f(n),表示该内存池没有空闲内存可以使用,判断下一个内存池;如果没有下一个内存池,并且f(n)>0,那么新建一个大小为F(n)的内存池,其中F(n)=(msize+标志位大小)*f(n);同时初始化所有的标志位为free,初始化freen为1,然后返回该内存池;如果f(n)<=0,则通知应用程序已达内存上限;4)得到有空闲内存可以使用的内存池以后,把该内存池的位置为freen的内存给应用程序使用,同时把位置为freen的内存的标志设为used,然后从位置freen+1开始,逐个判断内存池的内存的标志是否为free,如果在内存池结束前找到标志为free的内存,则令该内存池的freen等于找到的标志为free的内存所在的位置,如果没找到标志为free的内存,则令该内存池的freen等于f(n)+1;5)当应用程序释放大小为msize的内存时,则把该内存的标志设为free,同时判断该内存在所在内存池的位置是否大于所在内存池的freen,如果小于freen,则令freen等于该内存在所在内存池的位置;6)应用程序退出的时候,销毁内存池链表中的所有内存池。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江大学,未经浙江大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/200510060795.6/,转载请声明来源钻瓜专利网。
- 上一篇:扇贝即食制品加工方法
- 下一篇:光学储存媒体韧度的量测装置