分离链表
分离链表(Segregated Free Lists)是现代动态内存分配器(如glibc的ptmalloc)的核心理念,通过将空闲块按大小类别分类管理,实现近似O(1)的分配和释放。
核心思想:
- 将空闲块按大小范围分成多个类别(size class),每个类别维护一个独立的空闲链表。
- 例如:16字节、32字节、64字节、128字节……每个大小区间一个链表。
分配流程:
- 根据请求大小确定所属的大小类别。
- 在该类别的空闲链表中查找合适的空闲块。
- 若链表非空,直接分配第一个合适的块。
- 若链表为空,向更大的类别请求空闲块,或从操作系统获取新堆空间。
释放流程:
- 根据块大小确定类别。
- 将块插入对应链表中。
- 合并相邻空闲块(可能需要跨链表操作)。
优势:
- 快速分配和释放:在正确的链表中查找,无需遍历整个堆。
- 减少碎片:大小类别的分隔减少了不匹配分配的可能性。
- 更好的空间局部性:同类别块大小相近,缓存友好。
分离链表是对隐式链表和显式链表的重要改进,在性能和内存利用率之间取得了更好的平衡。
链接到
- 上一个知识点:9.18 显式空闲链表
- 下一个知识点:9.20 垃圾收集