Ch03-LevelDB 之 Arena 内存管理

Ch03-LevelDB 之 Arena 内存管理

May 10, 2022
LevelDB
leveldb

Arena 内存管理

1. 内存管理 #

arena

整个内存空间实际上借由 std::vector<char*> blocks 进行管理,其中每个元素都保存了一个指向堆内存(默认 4KB)的指针。如果剩余的内存不足的时候,那么重新分配一段新的空间,并将指向该空间的指针存入到 blocks 这个 vector 中。

2. 分配策略 #

  1. 当 block 有足够剩余的内存时,直接用剩余的内存分配
  2. 当 block 没有足够的剩余内存时:
    • 当需求内存大于 1KB 时 4096/4,则单独分配需要的内存
    • 当需求内存小于 1KB 时,重新申请一块默认大小的内存块,再分配需要的内存

3. 释放策略 #

Arena 不支持释放部分内存,只能一次性释放所有分配的内存。

4. 提供的接口 #

接口 说明
char* Allocate(size_t bytes);
char* AllocateAligned(size_t bytes); 内存对齐