32位CPU不支持4GB+内存? 终于搞懂了

本文经超能网授权转载, 其它媒体转载请经超能网同意

今天给大家科普一个, 那就是 内存寻址能力与CPU的位宽有关系吗?

答案是 没有关系.

这个问题以讹传讹了很多人, 传了很久, 确实有必要说说.

CPU的寻址能力与它的地址总线位宽有关, 而我们通常说的CPU位宽指的是数据总线位宽, 它和地址总线位宽半毛钱关系也没有, 自然也与寻址能力无关.

简单的说, CPU位宽指的是一个时钟周期内CPU能处理的二进制位数, 如8086 CPU是16位的, 可以一次处理2个字节 (16个bit) , 80386 CPU是32位, 能一次处理4个字节, 目前的CPU基本上64位的了, 一次能处理8个字节.

我们的Windows操作系统也分为32位和64位, 主要是针对上面CPU的位宽做了些优化, 比如32位的CPU就不能用64位的Windows (因为CPU一次只能处理32bit, 而操作系统给你的指令是要处理64bit) , 但64位的CPU就可以运行32位的Windows, 也能运行64位Windows.

那CPU的地址总线位宽到底是个什么鬼?

Intel的解释是Physical Address Extensions (PAE) is a feature that allows 32-bit processors to access a physical address space larger than 4 gigabytes.

上面图片是Intel Xeon E5-2698 v3的截图, 专门就扩展物理地址作了说明, 大意就是说这个是为了让32位的处理器能使用超过4GB的内存.

这个PAE就是CPU的地址总线位宽. 在8086这个16位CPU上, 它的地址总线位宽是20位, 正好能寻址1MB, 80286它的PAE是24位, 在Pentium II (32位CPU) 时这个PAE变成了36位, 可以支持64GB的寻址.

64位CPU出现之后, 其地址总线位宽一般采用的是36位或者40位, 它们寻址的物理地址空间为64GB或者1T.

那地址总线和数据总线有什么关系? 可以这么理解, 地址总线用来定位, 数据总线用来传输, 也就是当CPU需要从内存读取数据或向内存写入数据时, 它使用地址总线来指定其需要访问的存储器块的物理地址, 然后通过数据总线发送数据.

所以说, CPU的位宽和寻址能力是没有关系的, 16位CPU的地址总线位宽可以是20位, 32位CPU的地址总线可以是36位, 64位CPU的地址总线位宽可以是40位. 所以你下次一定不要说32位的CPU只能寻址2^32(4GB)了, 大错特错.

那操作系统的位宽和寻址能力有什么关系吗, 这个其实还是有的. 我们在使用计算机时, 操纵的其实是逻辑地址, 32位操作系统的逻辑地址寻址范围只有2^32=4GB.

所以, 不管你用什么样的CPU, 它最多也只支持4GB的内存容量, 但 这是操作系统的锅, 并不是说32位CPU只能寻址4GB空间. 可能是在这儿容易引起错觉, 一定要还CPU一个清白.

2016 GoodChinaBrand | ICP: 12011751 | China Exports