本篇接下来所讨论的范围在x86体系32位Linux环境下。
虚拟地址空间由虚拟内存来提供的,关于虚拟内存的三个重要能力:
- 它将主存(RAM)看成是一个存储在磁盘(ROM)上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这样来高效使用主存
- 它为每一个进程提供了一致的地址空间,从而简化了内存管理
- 保护每个进程的地址空间不被其他进程破坏
Linux系统会当前每一个进程分配一个2^32位大小(4G)的一块空间,这块空间就叫做进程的虚拟空间。
IBM公司关于虚拟的解释:
它存在,你看得见,它是物理的
它存在,你看不见,它是透明的
它不存在,你看得见,它是虚拟的
它不存在,你看不见,它被删除
空间的具体内容如下图所示:
接下来分别阐述每一块空间的作用
-
从0x00000000到0x08048000的这段空间是预留的,是不能访问的,例如对空指针进行访问程序就会崩溃
-
程序运行时产生的指令就放在.text段(代码段)。这一段同时也