内核向用户层提供申请用户虚拟空间的两种机制除了mmap之外,另外一个就是brk机制,mmap主要控制虚拟空间mmap区域管理,而brk机制主要管理的是一个进行的堆空间。
brk/sbrk
brk 和sbrk是内核向用户提供的两个用于申请堆空间的系统调用,一般应用程序并不直接使用brk系统调用,而是通过glibc封装好的malloc接口间接调用brk系统调用。
#include <unistd.h>
int brk(void *addr);
void *sbrk(intptr_t increment)
linux 一个整个虚拟空间分布如下所示:
其中堆空间始于进程的数据段结束地址即start_brk,随着内存的分配和释放而增加和减少,堆空间其实就是一段连续的虚拟内存空间,而通常将堆的当前内存边界称为”Program brak"简称为brk,brk用于记录的是当前堆已经分配使用的结束地址(即未使用分配的起始地址)。