剩下两个是 explicit free list , buddy system,本来打算放在一篇里写,但是可能会太长,所以还是分开好
序言
本系列基本上是对cs:app allocator那一节的总结,除了buddy system会扩展一些
内存分配器的设计空间很大,如:
块的格式:
- implicit free list: 不显式给出当前块在free list中的前驱,后继,而是将free/allocated block放在一起,每次分配需要时间O(n+m),n是 # free block,m是# allocated block
组织成如下:
为了方便合并(与前驱),一般会使用一个footer,这样可以在O(1)的时间内合并,而不是要扫描整条list,才能得到前驱,footer格式如下
称为boundary tag:前驱的footer就在当前块的前一个字(一个固定的距离)
- explicit free list
这样一般会在块内指明当前块的前驱后继,这样一般是