剩下两个是 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
这样一般会在块内指明当前块的前驱后继,这样一般是

本文介绍了内存分配器的设计空间,包括块的格式、内存管理策略,并详细探讨了K&R Allocator的选择:显式空闲列表、按地址排序的自由块以及立即合并策略。K&RAllocator的实现利用了union进行对齐,采用环形链表结构,其free和malloc操作的细节也被剖析。
最低0.47元/天 解锁文章
745

被折叠的 条评论
为什么被折叠?



