从上图可以看出,进程的用户空间大小为 3GB。Linux 按照功能上的差异,把一个进程的用户空间划分为多个段,下面介绍一下各个段的作用:
- 代码段:用于存放程序中可执行代码的段。
- 数据段:用于存放已经初始化的全局变量或静态变量的段。如在 C 语言中,使用语句 int global = 10; 定义的全局变量。优品拍拍
- 未初始化数据段:用于存放未初始化的全局变量或静态变量的段。如在 C 语言中,使用语句 int global; 定义的全局变量。
- 堆:用于存放使用 malloc 函数申请的内存。
- mmap区:用于存放使用 mmap 函数映射的内存区。
- 栈:用于存放函数局部变量和函数参数。
虚拟内存区
从上面的介绍可知,Linux 按照功能上的差异,把虚拟内存空间划分为多个 段。那么在内核中,是通过什么结构来管理这些段的呢?