跟着卷卷龙一起学 Camera-- 内存池浅析 03
最简单的内存分配器
优点 :实现简单
缺点:分配时搜索合适的内存块效率低,释放回归内存后归并比较消耗大
要解决前面两个问题,最好的方法就是内存池技术。具体方法就是大小固定、提前申请、重复利用。
因为内存的申请和释放是很低效的,所以我们只在开始时申请一块大的内存(在该块内存不够用时在二次分配),然后每次需要时都从这块内存中取出,并标记下这块内存被用了,释放时标记此内存被释放了。释放时,并不真的把内存释放给操作系统,只要在一大块内存都空闲的时候,才释放给操作系统。这样,就减少了 new/delete 的操作次数,从而提高了效率。在调用内存分配函数的时候,大部分时间所分配的内存大小都是一定的,所以可以采用每次都分配固定大小的内存块,这样就避免了内存碎片产生的可能。
如图,mempool 是一个内存池类,pBlock 指向一个内存块。nUintSzie 是分配单元的大小,可以理解为一张 image 的大小。nInitSize 是第一次申请内存的大小,可以理解为申请几张临时 image。nGrouSize 是后面二次向系统申请的内存的大小。
Memoryblock 是一个内存块类,两部分构成,一部分是类的大小,另一部分则是实际的内存部分。nSize 代码该内存池块的大小,可以理解为改内存块可以放几张图。nFree 是空闲内存单元的个数,nFirst 代表的是下一个要分配的内存单元的序号。
版权声明: 本文为 InfoQ 作者【卷卷龙】的原创文章。
原文链接:【http://xie.infoq.cn/article/7bb71d70c61c44bcd1ae9e089】。文章转载请联系作者。
评论