前言
还记得小时候的电脑都是 32-bits 的系统,大约在 win7 的时代已经逐步替换成 64-bits 系统了,但我还是不了解具体来说有什么差异,只记得有段时间有两种软件规格可以选择,或是某些软件需要用「兼容模式」来执行。
32-bits vs 64-bits 系统
程序执行需要内存空间,而这里的 bit 指的就是 CPU 寄存器(register)的大小,像是 a + b 的运算 CPU 就会先把 a 与 b 数值载入到寄存器当中,然后 CPU 必须通过地址才能知道数据放在哪,而寄存器大小直接攸关:
- CPU 一次能处理多少数据
- 可表示的整数范围
- 能存取多少内存地址
存储极限
- 32-bits 大小下可寻址的内存空间:2^32=4294967296,4,294,967,296 bytes ≈ 4 GB
- 64-bits 大小下可寻址的内存空间:2^64=18446744073709551616,18,446,744,073,709,551,616 bytes ≈ 16 EB(Exabytes)
所以这就是为什么 32 位系统最多不超过 4GB 的 RAM,现代软件消耗更多内存空间也都改用 64-bits 的规格制作,64-bits 的规格能兼容 32-bits 但反过来则不行,因为使用了不同的指令集与内存布局。
世代更新
在 PC 与服务器上 64-bit 全面胜出,32-bit 已经是过去式,通常架构上也有更好的规格:
- SSE2(更强的浮点 / SIMD 运算)
- 更多通用寄存器
- 更好的函数调用方式
但在嵌入式场景 32-bit 有自己的演进路线,64-bit 反而是多余的成本。
命名
x86 是因为祖先处理器型号叫 80?86,就用代数「x」来代替中间变动的 ? 数字;而 x64 则是代表 x86 架构的 64 位延伸版,也被称为 x86-64。