显式空闲链表
隐式空闲链表的遍历时间与堆中总块数成正比(包括已分配块),性能随堆增长急剧下降。显式空闲链表通过在空闲块内部存储前驱和后继指针,将遍历限制在空闲块之间,提高了分配效率。
空闲块结构:
- 空闲块的有效荷载区域存储
prev和next指针,形成双向链表。 - 已分配块无需存储指针,因此不增加额外开销。
管理策略:
- LIFO(后进先出)策略:后释放的块更靠近链表头部,下一次分配优先使用最近释放的块。简单、快速,但碎片化可能更严重。
- 地址顺序策略:按地址从小到大维护空闲块链表。合并且重新插入时需按地址排序,耗时增加,但内存利用率更高。
释放时的四种情况(边界标记法的优势体现):
- 前后块都分配:当前块直接加入空闲链表。
- 前块空闲、后块分配:当前块与前空闲块合并。
- 前块分配、后块空闲:当前块与后空闲块合并。
- 前后块都空闲:三块合并为一个大的空闲块。
显式空闲链表的分配时间复杂度降低为空闲块数量的函数,而非总块数。
链接到
- 上一个知识点:9.17 隐式空闲链表
- 下一个知识点:9.19 分离链表