其他分享
首页 > 其他分享> > Glibc堆管理机制基础

Glibc堆管理机制基础

作者:互联网

最近正在学习linux下堆的管理机制,收集了书籍和网络上的资料,以自己的理解做了整理,做个记录。如果有什么不对的地方欢迎指出!

Memory Allocator

常见的内存管理机制

malloc工作机制

第一次调用malloc

内存分配机制

头文件:#include<unistd.h>

  1. 函数原型:int brk(void* end_data_segment)
  2. 功能和作用:用于设置program_break指向的位置。
  1. 函数原型:void* sbrk(intptr_t increment)
  2. 功能和作用:同brk(),参数可以是负数。执行成功返回上一次program_break的值,可以设置参数为0返回当前的program_break.
  1. 功能和作用:当用户申请空间大于等于128kb,也就是0x20000字节时,不再使用brk()进行分配,改为使用mmap()。
  1. 功能和作用:堆mmap()申请的空间进行回收。
    内存分配图

第二次调用malloc

chunk

chunk是glibc管理内存的基本单元。主要分为以下几类:

chunk = chunk header + user data,malloc返回给用户的其实是user data指针,具体如下图:

alloced chunk结构

free chunk

top chcunk

last remainder chunk

堆空闲块管理结构bin

当alloced chunk被释放后,会根据大小放入bin或者合并到top chunk 中去。bin的主要作用时加快分配速度,通过链表方式(chunk中的fd和bk指针)进行管理。主要有以下几种,顾名思义:

fastbinsY:这是一个bin数组,里面有NFASTBINS个fast bin

bins:也是一个bin数组,一共有126个bin,按顺序分别是:

fast bin

unsorted bin

small bin

large bin

随后附上glibc内存管理流程图

看不清楚可以保存下来放大。

标签:bin,Glibc,基础,管理机制,分配,大小,内存,small,chunk
来源: https://www.cnblogs.com/unr4v31/p/14446412.html