Linux堆的一些基础知识
目录 堆的概述 什么是堆 堆的基本操作 堆操作背后的系统调用 堆的相关数据结构 微观结构 malloc_chuck chunk相关宏 bin 宏观结构 arena heap_info malloc_state 深入了解堆实现 堆初始化 malloc_consolidate() 创建堆 unlink 申请内存块 _libc_malloc _int_malloc 释放内存块 _libc_free 内容来源 堆的概述 什么是堆 堆用来在程序运行时动态的分配内存,对其实就是虚拟空间里从地址向高地址增长的连续的线性区域。 堆的基本操作 void *malloc(unsigned int size):作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是分配区域的起始地址,或者说,此函数是一个指针型函数,返回的指针指向该分配域的开头位置。 void free(void *ptr):释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。 堆操作背后的系统调用 brk():将数据段(.data)的最高地址指针_edata往高地址推。(从堆头开始,参数为地址) mmap():在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。(分配大于128k) sbrk():将地址指针往高地址推。(从当前指针位置开始,参数为指针增量)