Skip to content

总体框架

约 188 个字 7 行代码 1 张图片 预计阅读时间 1 分钟

nebula 内部的内存管理由 ObjectPool 负责,使用模板化编程方式。ObjectPool 中实际负责内存分配的是 Arena 类,另外还保存所有小对象的起始地址。

Arena

Arena 是实际上是内存池分配器,该分配器的最小单元是 chunk,系统内只会存在一个 current chunk,待分配满或者不够分配时就会申请新的 chunk,然后将前面的 chunk 和新的 chunk 通过链表连接起来,方便后续回收。

Chunk

内存池分配的最小单元,分配使用 new 来分配固定字节的内存。

C++
void newChunk(std::size_t size) {
  DCHECK_NE(size, 0);
  std::byte *ptr = new std::byte[size + sizeof(Chunk)];
  currentChunk_ = new (ptr) Chunk(currentChunk_);
  availableSize_ = size;
  currentPtr_ = (ptr + sizeof(Chunk));
}