malloc如何分配内存,free怎么知道释放多少内存

294 阅读1分钟

代码段:二进制可执行文件

已初始化数据段:静态常量

未初始化数据段:

堆区:从低地址往高地址,动态分配内存

文件映射段:动态库,共享内存等

栈区:从高地址往低地址,局部变量和函数调用上下文等

malloc: malloc是一个库函数,分配虚拟内存,使用时才会分配真实的物理内存,缺页异常时页表建立映射关系。 实际分配时会比申请size多分配16字节用来记录内存块的大小和其他描述信息

如何分配

分配大小 < 128k时,通过brk系统调用从堆区分配; malloc会维护一个内存池,优先从内存池分配,减少系统调用,避免缺页异常,但是会增加内存碎片

分配大小 >= 128k时,通过mmap系统调用从文件映射段 分配内存;

free

如果是通过brk分配的,会归还到内存池 如果是mmap,立刻归还操作系统

怎么知道释放多少:申请时多分配16字节,记录了内存块信息,释放时偏移16个字节;