01 x86 32位Linux进程虚拟地址空间区域划分

文章详细介绍了在32位Linux环境下,程序运行时内存的划分,包括用户空间和内核空间,以及用户空间中的代码段、只读数据段、数据段、BSS段、堆、加载的动态链接库、栈空间、命令行参数和环境变量等各个部分的功能和作用。内存管理的关键在于保护、组织和高效使用这些不同的内存区域。

目录

用户空间:

不能访问段:

代码段(.text段)和只读数据段(.rodata):

.data段:

.bss段:

.heap堆:

加载共享库(动态链接库):

stack空间:

命令行参数和环境变量:

内核空间:


任何的编程语言都会产生两种东西:指令和数据。

        C++代码编译连接后会产生一个.exe可执行文件,放在磁盘上。CPU不可能直接运行磁盘上的程序。CPU首先把程序从磁盘上加载到内存中,那么它把可执行程序的哪些东西加载到内存当中,加载到内存当中如何存放?内存有没有区域的划分,划分了以后是什么样子?

        以x86 32位linux环境为例,当一个程序运行时,linux系统内核会给进程开辟一个2的32位,也就是4G大小的虚拟地址空间,默认被划分为两个部分:

        用户空间3G,内核空间1G(可以通过修改系统的配置,来调整内存比例)

用户空间:

不能访问段:

  • 并没有从0地址开始存放内容,前面空了一段(0~0x08048000),是预留的不能访问。
  • 无效地址段,提供了一个物理内存和虚拟内存之间的间隔,防止进程访问不属于它的内存区域。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值