写点什么

跟着卷卷龙一起学 Camera-- 内存池浅析 03

作者:卷卷龙
  • 2022 年 9 月 26 日
    广东
  • 本文字数:534 字

    阅读完需:约 2 分钟

最简单的内存分配器

优点 :实现简单

缺点:分配时搜索合适的内存块效率低,释放回归内存后归并比较消耗大



要解决前面两个问题,最好的方法就是内存池技术。具体方法就是大小固定、提前申请、重复利用。

因为内存的申请和释放是很低效的,所以我们只在开始时申请一块大的内存(在该块内存不够用时在二次分配),然后每次需要时都从这块内存中取出,并标记下这块内存被用了,释放时标记此内存被释放了。释放时,并不真的把内存释放给操作系统,只要在一大块内存都空闲的时候,才释放给操作系统。这样,就减少了 new/delete 的操作次数,从而提高了效率。在调用内存分配函数的时候,大部分时间所分配的内存大小都是一定的,所以可以采用每次都分配固定大小的内存块,这样就避免了内存碎片产生的可能。

如图,mempool 是一个内存池类,pBlock 指向一个内存块。nUintSzie 是分配单元的大小,可以理解为一张 image 的大小。nInitSize 是第一次申请内存的大小,可以理解为申请几张临时 image。nGrouSize 是后面二次向系统申请的内存的大小。

Memoryblock 是一个内存块类,两部分构成,一部分是类的大小,另一部分则是实际的内存部分。nSize 代码该内存池块的大小,可以理解为改内存块可以放几张图。nFree 是空闲内存单元的个数,nFirst 代表的是下一个要分配的内存单元的序号。


发布于: 刚刚阅读数: 4
用户头像

卷卷龙

关注

还未添加个人签名 2022.07.26 加入

还未添加个人简介

评论

发布
暂无评论
跟着卷卷龙一起学Camera--内存池浅析03_ISP_卷卷龙_InfoQ写作社区