4G虚拟地址空间布局主要为以下布局方式:
3G用户地址空间详情:
保留区:此区不可访问,无访问权限,约128M。
.tax代码段:存储代码中的指令,一份代码中除数据外其他的都为指令,局部变量也属于指令,但是其存储在栈上,当函数运行时才会在栈中预留好的区域开辟。
.data数据段:存储代码中的数据,全局变量,静态局部变量,但两者必须为已初始化且初始化不为零的数据。
.bss段:存储代码中没有初始化并且初始化为零的数据。
堆区:需要申请一块连续的指定大小的动态内存时,需要在堆区人工申请,人工释放(如不释放,则会造成内存泄漏)。
栈区:存储局部变量,以及函数的运行也需要,使用完后,系统自动释放。
命令行参数: 原型类似于 int main(int argc, char *argv[],char *envp[])。
环境变量:命令行参数中的三个参数。
1G内核地址空间详情:
①:直接内存空间(ZONE_DMA(大约16MB))
可以加快磁盘和内存之间数据的交换,不需要经过CPU的寄存器,大大增加了效率。
②:常用内存(ZONE_NORMAL (大约892MB))
内核中最重要最常用的部分。用于直接映射。PCB就在这里。
③:高端内存(ZONE_HIGHMEM (128MB))
用于在内核中映射高于1G的物理内存时使用。64位系统则没有该段(根本不需要,因为64位操作系统给内核空间分配的内存达到512G)