计算机系统-进程的虚拟地址空间
从最低的地址开始逐步网上分别是
只读代码和数据
text区:这里是需要执行的机器指令
readonly区:这里是const全局变量和字符串常量,const变量不存放在这里
读/写数据
data区:初始化后的全局变量 静态变量
BSS区:未初始化的全局变量 静态变量
堆区
当调用像malloc和free这样的C标准库函数时,堆区可以在运行时动态地扩展和收缩
共享库的内存映射区域
大约在地址空间的中间部分是一块用来存放像C标准库和数学库这样的共享库的代码和数据的区域
栈区
位于用户虚拟地址顶部的是栈区,编译器用它来实现函数调用,用户栈会在程序执行期间动态扩展和收缩,特别的,当我们每次调用函数时候栈就会增长,当一个函数返回时候,栈就会收缩
特别注意的是栈区的空间地址是从高开始,这也是为什么栈是先入后出的,第一个进去的,被放在最里面,最先接触到的是最后进去的
内核虚拟内存
地址空间顶部就是为内核保留的,不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数。相反它们必须调用内核来执行这些操作