leveldb 03 Arena学习

学习了 levelDB源码分析-Arenaleveldb学习:内存池Arena

图片是上面第一篇博客里的:
这里写图片描述

1.成员变量blocks_是个vector,它的每个元素都是一个char*指针,指向一段内存(或者说是char[]数组). 在Arena的析构函数里,会遍历该vector的每个元素,使用delete[]删除所有分配的内存。 blocks_的主要作用也在于此,保存了分配的所有内存的地址,在Arena析构时可以找到所有的地址,依次释放掉内存。
2. alloc_ptr_在某一时刻指向的是如图中所示的blocks_的其中一个元素指向内存的未使用空间的首地址。
3. private的函数AllocateNewBlock是本类最底层的函数,实现主要步骤是:

char* result = new char[block_bytes]; /*分配内存*/ 
blocks_.push_back(result);/*将内存首地址放到blocks里,用于析构时释放掉。*/


4. public接口主要是两个:Allocate 和 AllocateAligned . 而这两个函数主要是在一定条件下调用private函数AllocateFallback, 而AllocateFallback是在一定条件下调用AllocateNewBlock, 所以最终public接口还是主要调用的AllocateNewBlock.
5. 至于成员变量alloc_ptr_ 和alloc_bytes_remaining_ 主要用在所需分配内存特别小的时候,直接利用当前alloc_ptr指向的剩余内存char*。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值