Linux下的4G虚拟地址空间

在windows下4G 地址空间中低2G,0x00000000-0x7FFFFFFF 是用户地址空间,4G地址空间中高2G,0x80000000-0xFFFFFFFF 是 系统地址空间。访问 系统地址空间需要程序有ring0的权限。而Linux对4G空间的划分不同与windows。linux将最高的1G 字节(从虚拟地址0xC0000000 到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G 字节(从虚拟地址0x00000000 到0xBFFFFFFF),供各个进程使用,称为“用户空间”。

在Linux系统下,0xC00000000-0XFFFFFFFF为系统空间,为所有的系统进程所共享,0X00000000-0XC0000000为用户空间。

今天讲的是Linux下的虚拟地址空间。

1、保留区:是用户不可访问的128M地址空间。

例如:int* p = NULL; 后是不可以再对p进行使用,因为p的地址为 NULL ,不可访问

2、.text段:即代码段,存放的是一些指令

3、.data 和.bss都是数据段:其中.data存放的是已初始化且初始化不为零的数据;而.bss是未初始化或初始化为零的数据

用两个段来存放数据是为了节省空间

4、堆区:特点是由用户管理,先进后出,用malloc、ralloc、calloc动态分配内存使用堆,从低地址向高地址增长

5、共享库:加载共享库和使用mmap共享内存

6、栈区:特点是由系统管理,先进后出,里面放了局部变量、函数形参、自动变量,从高地址向低地址增长

猜你喜欢

转载自blog.csdn.net/weixin_41576955/article/details/84075908
今日推荐