1. dlmalloc 边界标记(boundary tag)在合并空闲块中的作用?
dlmalloc 的边界标记(boundary tag)在合并空闲块中的作用是什么?
- boundary tag 的组成(size + prev_size)
- 向前/向后合并
- 合并的时空开销权衡
dlmalloc 在每个内存块(chunk)的头部和尾部存放边界标记(beginning tag 和 end tag),包含块大小和空闲标志。利用这些标记,分配器可以快速判断相邻块是否空闲:释放一个块时,可检查其前、后相邻块的 tag,若空闲则合并成大块,从而减少外部碎片。end tag 的存在使分配器无需遍历即可找到前一个块,实现 O(1) 的向后合并。这是经典的"双向边界标记"(boundary tag)优化。
boundary tag 的价值是"以少量元数据换取 O(1) 合并":释放时能立即知道相邻块是否空闲并合并,避免碎片积累。这也是 dlmalloc 及其后继(ptmalloc)的基础设计。