[动态内存分配] Allocaotrs 1/3 : K&R

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

剩下两个是 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

这样一般会在块内指明当前块的前驱后继,这样一般是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值