原帖 /t/933184
里面好多人说计算机的位长是指地址线的长度,这个是有问题的,但又和原帖题主的问题有区别,就另开一贴。
纵观计算机的历史和原理,所谓的 CPU 的位长都是指 ALU 能一次性处理的数据的长度,一般也是普通寄存器的长度。
而计算机内存地址超过位长是很平常的。比如因特尔第一代 CPU 4004 是一个 4 位机,显然一个只能访问 2^4=16 个不同地址的 CPU 是没有商用的意义的,所以它实际上支持 12 位地址。8 位机时代通常支持 16 位地址( 64KB ),16 位机通常支持 18-24 位地址。其中有些指令集有超长地址寄存器,需要特殊指令才能操作;有些地址与位长等长,但采用 bank 选择访问不同的物理内存区域;还有两者混合式的。
32 位因为足够绝大多数应用使用,而且 32 位机几乎都有虚拟地址能力,导致初期没有扩大指令集内可见的地址空间的需求,所以 32 位是第一代长时间(逻辑)地址和位长等长的。当然地址线的扩展从未停止,奔腾 2 就已经有 36 位了。到了 32 位后期,各种指令集层面的扩展也层出不穷,比如 PAE ,只不过这时候主流程序都是用高级语言编写的,访问这些扩展都需要特殊的汇编指令,实际使用它们的不多。
64 位出现之后倒是反其道而行之,早期 64 位 CPU 只有 40 位地址总线,现在民用 CPU 也很少有 64 位地址线的。