发明名称 解决频繁分配释放同等大小内存的方法
摘要 本发明公开了一种解决频繁分配释放同等大小内存的方法。本发明的方法通过维护一个可以扩展的内存池的链表,用函数来动态控制内存池链表中内存池的大小和内存池的数量。用链表来管理内存池,避免了一般内存池分配方式在内存池不够大的情况下,需要扩展原来的内存池,不能扩展的时候不得不重新分配更大的内存块作为内存池,导致内存碎片增多,不断的扩展内存池又导致了频繁分配内存的情况。用函数来控制分配的内存池的大小和数量,使得应用程序能更有效的利用内存和节约内存,提高应用程序内存的可定制性。
申请公布号 CN1327348C 申请公布日期 2007.07.18
申请号 CN200510060795.6 申请日期 2005.09.16
申请人 浙江大学 发明人 卜佳俊;陈纯;方丰平;柯化成
分类号 G06F9/46(2006.01);G06F12/02(2006.01) 主分类号 G06F9/46(2006.01)
代理机构 杭州求是专利事务所有限公司 代理人 林怀禹
主权项 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)应用程序退出的时候,销毁内存池链表中的所有内存池。
地址 310027浙江省杭州市西湖区浙大路38号