4G的虚拟地址空间布局

本文详细介绍了32位Linux系统中进程的内存布局,包括3GB的用户空间和1GB的内核空间。用户空间涵盖了保留区、.text段、.data段、.bss段、堆区及栈区等部分;而内核空间则分为DMA区、普通区和高端内存区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每个进程运行于自己的内存中,即虚拟地址空间中,在32位操作系统下其大小为4G,

,在32

一、3G的用户空间

1、保留区的大小为128M,是不可访问区。例如定义一个指针p,int*p = NULL;之后不能对p进行使用,因为p的地址为NULL,即0x0000 0000,该地址属于保留区即不可访问区。

2、.text 段存放指令,区域的大小在程序执行前已经确认,可能包含一些只读的常数变量,如字符串常量。

3、.data段存放已初始化数据段的全局变量和静态变量(static修饰的变量)。

4、.bss段存放未初始化以及初始化为0的全局变量和静态变量,在程序加载的时候由内核清0,

5、.heap即堆区,是由用户自己管理,先进先出,动态分配内存malloc、ralloc、calloc是在堆区,通过free()函数释放空间,增长方向是由低地址向高地址增长。

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

5.stack即栈区,是由系统管理,先进后出,保存局部变量、函数形参、自动变量。增长方向是由高地址向低地址增长。

7、命令行参数:C语言中的命令行参数涉及到程序的主函数main(int argc,char *argv[]),argc表示命令行参数的个数,无需用户传递,自动确定,argv[]指向命令行传递进来的参数,其中argv[0]指向的是可执行文件的文件名。

8、环境变量:int execve(char *pathname,char *argv[],char *envp),char *envp即环境变量,它包含一个或许多应用程序所使用到的配置信息,

二、1G的内核空间

Linux操作系统和驱动程序在内核空间,用户不能访问,内核空间在4G虚拟地址的高端,但其映射的物理内存地址在低端。

Linux内核空间有三个区域

DMA区(ZONE_DMA):<16M>直接访问区

普通区  (ZONE_NORMAL):<892M>常用区,映射页目录页表

高端内存区(ZONE_HIGHMEM):<128M>为大于1G的文件作映射

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值