![](https://csdnimg.cn/release/download_crawler_static/87377098/bg8.jpg)
main arena 中有过多空闲内存的时候,也会通过减小 program break location 的方式
来缩小 main arena 的大小。
3. After free in main thread :
在主线程调用 free 之后:从内存布局可以看出程序的堆空间并没有被释放掉,原来调用 fr
ee 函数释放已经分配了的空间并非直接“返还”给系统,而是由 glibc 的 malloc 库函数
加以管理。它会将释放的 chunk 添加到 main arenas 的 bin(这是一种用于存储同类型 fre
e chunk 的双链表数据结构,后问会加以详细介绍)中。在这里,记录空闲空间的 freelist
数据结构称之为 bins。之后当用户再次调用 malloc 申请堆空间的时候,glibc malloc 会
先尝试从 bins 中找到一个满足要求的 chunk,如果没有才会向操作系统申请新的堆空
间。如下图所示:
4. Before malloc in thread1 :
在 thread1 调用 malloc 之前:从输出结果可以看出 thread1 中并没有 heap segment,
但是此时 thread1 自己的栈空间已经分配完毕了: