ptmalloc内存管理器
ptmalloc是glibc默认的内存管理器。我们常用的malloc和free就是由ptmalloc内存管理器提供的基础内存分配函数。ptmalloc有点像我们自己写的内存池,当我们通过malloc或者free函数来申请和释放内存的时候,ptmalloc会将这些内存管理起来,并且通过一些策略来判断是否需要回收给操作系统。这样做的最大好处就是:让用户申请内存和释放内存的时候更加高效。(假如每次malloc都需要进行系统调用,开销就会很大)
为了内存分配函数malloc的高效性,ptmalloc会预先向操作系统申请一块内存供用户使用,并且ptmalloc会将已经使用的和空闲的内存管理起来;当用户需要销毁内存free的时候,ptmalloc又会将回收的内存管理起来,根据实际情况是否回收给操作系统
主分配区(main_area)和非主分配区(no_main_area)
ptmalloc的内存分配器中,为了解决多线程锁争夺问题,分为主分配区和非主分配区。
1. 每个进程有一个主分配区,也可以允许有多个非主分配区。
2. 主分配区可以使用brk和mmap来分配,而非主分配区只能使用mmap来映射内存块
3. 非主分配区的数量一旦增加,则不会减少。
4. 主分配区和非主分配区形成一个环形链表进行管理。