虚拟空间,也称虚拟地址空间,是指操作系统提供给每个进程的一种抽象的地址空间,它是一个连续的、虚拟的地址空间,包含了所有进程的虚拟地址。虚拟地址空间是由操作系统分配给每个进程的,它通常比物理内存大得多。当进程需要访问虚拟地址空间中的某个地址时,操作系统会将虚拟地址映射到物理内存上的一个地址,这个地址是实际的物理地址,然后进程就可以访问这个地址了。虚拟地址空间的作用在于,它可以让每个进程拥有自己的地址空间,这样每个进程就可以独立地运行,互不干扰,而且进程之间访问同一个地址时,由于每个进程都有自己的虚拟地址空间,所以它们访问的实际上是不同的物理地址。这样就可以实现进程之间的隔离和保护,同时也可以节省物理内存的使用。
虚拟地址空间的大小由操作系统决定,32位的操作系统虚拟地址空间的大小为 2^32 字节,也就是 4G,64 系统的操作系统虚拟地址空间大小为 2^64 字节,这是一个非常大的数。虚拟地址空间中用户区地址范围是 0~3G,里面分为多个区块。保留区位于虚拟地址空间的最底部,未赋予物理地址,任何对它的引用都是非法的,程序中的空指针(NULL)指向的就是这块内存地址。代码段也称正文段或文本段,通常用于存放程序的执行代码 (即 CPU 执行的机器指令),代码段一般情况下是只读的,这是对执行代码的一种保护机制。数据段通常用于存放程序中已初始化且初值不为 0 的全局变量和静态变量。数据段属于静态内存分配 (静态存储区),可读可写。
虚拟内存是在物理内存不够用时把一部分硬盘空间作为内存来使用,这部分硬盘空间就叫作虚拟内存。虚拟内存的作用在于,它可以将一部分不常用的数据或程序代码暂时存储到硬盘上,从而释放出物理内存,使得物理内存可以更好地为当前正在运行的程序服务,从而提高计算机的性能。虚拟内存的缺点在于,硬盘传输的速度要比内存传输速度慢得多,所以虚拟内存比物理内存的效率要慢得多。而且,断电后数据会丢失。
在操作系统中,当进程需要访问虚拟地址空间中的某个地址时,操作系统会将虚拟地址映射到物理内存上的一个地址,这个地址是实际的物理地址。CPU在访问虚拟地址空间中的地址时,需要将虚拟地址转换成物理地址。这个过程是由操作系统中的内存管理单元(MMU)来完成的。MMU会将虚拟地址分成两个部分:页号和页内偏移。页号用来查