您的位置:首页 > 运维架构 > Linux

Linux内存空间的分配

2016-07-11 11:00 381 查看
1、Linux内存空间

a. Linux的内存空间有4G的进程地址空间,包括用户空间与内核空间。用户空间分配了3G,而内核空间分配了1G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。只有用户进程进行系统调用的情况下(代表用户进程在内核态执行),才能够访问到内核空间。

b.用户空间对应进程,所以每当进程切换,用户空间就会跟着变化。而内核空间是由内核负责映射,它并不会跟着进程变化,是固定的。内核空间地址有自己对应的页表,用户进程各自有不同的页表。

c.为了保护数据的安全,每个进程的用户空间都是完全独立、互不影响。

2、Linux内存空间分布图



3、各个地址空间的数据

:保存局部变量、函数形参、自动变量。

:保存由malloc、ralloc、calloc分配空间的变量。

bss段:保存未初始化或初始化为0的全局变量。

rodata段:在全局数据里保存常量。

data段(静态数据区):保存初始化不为0的全局变量或者static修饰的变量。

代码段:保存代码。

4、各地址空间的特点 

栈:栈的权限是由系统决定的。数据具有先进后出、后进先出的特点。如果定义了一个未初始化的局部变量,那么它的值是一个随机值。

堆:堆的权限是由用户决定的,用户通过malloc、rolloc、calloc分配地址空间,并使用free()函数能够释放空间。数据具有先进先出、后进后出的特点。

bss段:如果定义了一个未初始化的全局变量,那么它的值为0。

rodata段:保存常量,常量的值是不允许被修改的。

data段:如果定义了一个未初始化的静态全局变量,那么它的值为0。

代码段:保存代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息