原帖 /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 位地址线的。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.