Arena是舞台竞技场的意思,在leveldb中它是一个内存池。
Arena所作的工作十分简单,是一个只负责申请空间的内存池,将申请到的内存放入std::vector blocks_中
,在Arena的生命周期结束后,统一释放掉所有申请到的内存,内部结构如下图所示。
有两个申请函数:其中一个可以申请对齐的内存空间,可以看出Arena没有delete/free函数在Arena的析构函数中统一释放所有的内存。
// Return a pointer to a newly allocated memory block of "bytes" bytes.
char* Allocate(size_t bytes);
// Allocate memory with the normal alignment guarantees provided by malloc
char* AllocateAligned(size_t bytes);
内部成员有:
// Allocation state
char* alloc_ptr_;
size_t alloc_bytes_remaining_;
// Array of new[] allocated memory blocks
std::vector<char*> blocks_;
// Bytes of memory in blocks allocated so far
size_t blocks_memory_;