所谓虚拟地址空间,就是程序可以使用的虚拟地址的有效范围。虚拟地址空间大小由操作系统决定,也受编译模式的影响
CPU的数据处理能力
cpu处理数据的能力由数据总线和主频决定
- 数据总线:用于cpu和内存之间传输数据,决定了cpu单次处理数据的能力
- 主频:决定了cpu单位时间内的数据处理次数
这里区分下数据总线和地址总线
数据总线 用cpu和内存传输数据 决定了cpu单次处理数据的能力
地址总线 用于cpu寻址,反应cpu寻址能力,同时地址总线还影响了内存的大小(还有其他因素)
编译模式
32位编译模式:
一个地址4字节,共32位。理论上能访问的虚拟内存大小为2^23 bytes即4G
对于32位的编译模式,不管实际物理内存有多大,程序能够访问的有效虚拟地址范围为 0 ~ 0XFFFFFFFF 即虚拟地址空间大小为4GB
64位编译模式:
理论上能够访问的虚拟内存空间大小为 2^64。,就目前的技术来讲,不但物理内存不可能达到这么大,CPU的寻址能力也没有这么大,实现64位长的虚拟地址只会增加系统的复杂度和地址转换的成本,带不来任何好处。
所以 Windows 和 Linux 都对虚拟地址进行了限制,仅使用虚拟地址的低48位(6个字节),总的虚拟地址空间大小为 2^48 = 256TB。