学而不思则罔,思而不学则殆。

我们主要参考 sploitfun 先生的 Understanding glibc malloc 一文,对 malloc 的实现进行认真的学习和分析,最后形成了几张图解,比较全面地概括了相关的数据结构和算法。

main arena 与 thread arena 的内存布局对比

arena 的数量规则及线程获取 arena 的方式

thread arena 中多个 heap 的链表结构和 top chunk 指针

main arena 的描述符与 top chunk 的位置关系

已分配和空闲 chunk 的结构对比

fast_bins 与 bins 数组中各类 bin 的分布

fast bin 的单向链表与普通 bin 的双向循环链表

unsorted bin 和 small bins 的用途及分配流程

big bins 与 top chunk 的用途和分配流程