本文讨论了: 1.ptmalloc的简单概念 2.各种chunk 3.bin数组以及brk和mmap 1.ptmalloc的简单概念 glibc在开始的时候malloc是不支持多线程的,但是在glibc_2.3x中集成了ptmalloc2,也就是平常使用的malloc。这就实现了对多线程编程的支持。本文将讨论ptmalloc的整个malloc(),free()以及他的初始化等。 为了保证内存的高效分配,在第一次调用malloc函数的时候会对整个ptmalloc初始化。初始化将预先分配一块内存,然后切割成若干块。将大于内存分配请求的一块内存交给当前进程(包含头部尾部,还要有一部分来记录)。当free的时候这块内存也不会立刻返回给操作系统,而是放到一个bin数组下,这个数组采用链表的方式保存着若干内存块,当触发某个条件的时候,内存会合并并且修改地址到另外的元素指针下。尽量避免内存碎片。 对于ptmalloc,他的设计是这样的: 1.具有长生命周期的大内存将使用mmap分配。 2.对于短生命周期的内存分配将使用brk