目录

简单的 BumpPointerAllocator

记录一个简单的 Bump Pointer 分配器 实现。

代码与说明:https://github.com/cloudwu/bpa/blob/master/bpa.c

作者在仓库里还带了一个回收算法:压缩清理 + 一定的大小限制,逻辑比较直观。

为了尽量加快分配,用了 slot 结构:取内存数据是 O(1),整体分配最坏是 O(MAX_SLOT),整体效率不错。


核心结构:slot、offset、slice

  • offset:按 align_size(8 字节)对齐后的偏移。
  • slot[i]:存的是 offset,通过 uid 可以快速定位到对应内存。
  • slice:除数据区外还存 id,这样从 pointer 算出 offset 后,也能快速找到对应 slice 和 id。

关系大致如下图:

/img/in-post/BumpPointer.png