目录

BumpPointerAllocator

目录

看一个简单的 bump pointer 的实现

github: https://github.com/cloudwu/bpa/blob/master/bpa.c

代码都在上方链接中,还自带一个回收算法,回收算法也比较简单,就是一个压缩清理,还有一定的大小限制

为了让整个分配的过程尽量快,作者使用了一个 slot 结构,O(1) 的方式就可以获取到内存数据,内存分配的过程最差是 O(MAX_SLOT),整体还是挺高效的

核心点在于 slot 和 offset 还有 slice 的 结构

offset 其实是除了 align_size(8 bytes) 的结果
slot[i] 存储了 offset,通过 uid 可以快速找到内存
slice 除了数据区域还会存储 id,这样,通过 pointer 计算 出offset 也能快速找到对应 slice 和 对应的 id

如下图:

/img/in-post/BumpPointer.png