深入理解glibc malloc:malloc() 与 free() 原理图解

💡 原文中文,约4400字,阅读约需11分钟。
📝

内容提要

本文分析了glibc中内存分配与回收的过程,涉及arena、bin和chunk三个层次。主要解释了这三个概念的关系和处理过程。文章未深入探讨具体细节,仅通过图解说明。

🎯

关键要点

  • 本文分析glibc中内存分配与回收的过程,涉及arena、bin和chunk三个层次。
  • arena是为线程分配的堆区,分为主线程的main arena和子线程的thread arena。
  • chunk是逻辑上划分的一小块内存,分为已分配、已释放、Top chunk和Last Remainder chunk。
  • bin是保存Free chunk链表的指针数组,分为Fast bin、Unsorted bin、Small bin和Large bin。
  • 内存申请流程中,第一次申请使用sbrk或mmap,后续申请根据剩余空间决定分配或扩容。
  • thread arena的内存申请流程与main arena类似,但使用mmap系统调用。
  • 内存回收时,释放的内存块根据大小添加到对应的bin中。
  • 内存分配时,优先从fastbin、small bins、unsorted bins、large bins和top bins中寻找合适的内存块。
  • 内存分配过程涉及锁机制以防止多个线程同时访问同一分配区。
  • 如果所有bin中都没有合适的chunk,则需要扩展top chunk或调用mmap分配新的内存。
➡️

继续阅读