Ch03-LevelDB 之 Arena 内存管理
May 10, 2022
Arena 内存管理
1. 内存管理 #
整个内存空间实际上借由 std::vector<char*> blocks
进行管理,其中每个元素都保存了一个指向堆内存(默认 4KB)的指针。如果剩余的内存不足的时候,那么重新分配一段新的空间,并将指向该空间的指针存入到 blocks 这个 vector 中。
2. 分配策略 #
- 当 block 有足够剩余的内存时,直接用剩余的内存分配
- 当 block 没有足够的剩余内存时:
- 当需求内存大于 1KB 时 4096/4,则单独分配需要的内存
- 当需求内存小于 1KB 时,重新申请一块默认大小的内存块,再分配需要的内存
3. 释放策略 #
Arena 不支持释放部分内存,只能一次性释放所有分配的内存。
4. 提供的接口 #
接口 | 说明 |
---|---|
char* Allocate(size_t bytes); | |
char* AllocateAligned(size_t bytes); | 内存对齐 |