目录
任何的编程语言都会产生两种东西:指令和数据。
C++代码编译连接后会产生一个.exe可执行文件,放在磁盘上。CPU不可能直接运行磁盘上的程序。CPU首先把程序从磁盘上加载到内存中,那么它把可执行程序的哪些东西加载到内存当中,加载到内存当中如何存放?内存有没有区域的划分,划分了以后是什么样子?
以x86 32位linux环境为例,当一个程序运行时,linux系统内核会给进程开辟一个2的32位,也就是4G大小的虚拟地址空间,默认被划分为两个部分:
用户空间3G,内核空间1G(可以通过修改系统的配置,来调整内存比例)

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

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

被折叠的 条评论
为什么被折叠?



