尽管应用程序编程时很少直接调用brk()系统调用,但是它是最经常使用的系统调用;
(1)C语言中的malloc以及C++语言中的new都在间接的调用着brk()这个系统调用;内核中含有3GB的用户虚存空间,会部分映射到物理存储空间;用户程序经过编译,链接形成的映像文件中含有一个代码段(在下)和一个数据段(在上,分为data段和bss段),包含所有的静态空间(包含全局变量和static的局部变量)是一个进程所基本必须的,所以在一个进程运行时就必须分配好这些空间,包括虚拟空间和物理页面及其映射;堆栈空间在虚存空间的顶部,运行时向下生长,代码段和数据段在底部,运行时不向上伸展;故数据段的顶部end_data和堆栈空间的下沿是个巨大的空洞,这就是运行时动态分配的空间;最初这个动态分配空间时从进程的end_data开始的,每次动态分配一块内存,这个边界就往上推进一段距离;内核中管理这个边界记录到该进程的mm_struct的 br