仅就x86平台来说,理论上32位CPU一个时钟周期只能处理32bit宽度的数据,64位CPU一个时钟周期可以处理64bit宽度的数据。
所以,如果同样要处理64bit宽度的数据,32位CPU起码需要两个时钟周期。但考虑到还需要额外的程序指令把两个32bit数据进行拼接,往往会需要更多的时钟周期。
然而如果数据本身就是32bit,或者说32bit足够表示某一类数据,例如单个无符号整数,在0到4,294,967,295之间,或者带符号的-2,147,483,648到2,147,483,647,又或者单精度浮点数。
32位和64位的CPU执行起来性能上几乎没有区别,而这个取值范围,基本能涵盖大部分实际业务所需要的处理的数据。
绝大部分需要计算性能的应用所处理的数据都是浮点数,而几乎所有的32位CPU,都内置或者可以加配浮点运算单元(FPU)。
以x86为例,从8087就支持IEEE 754-1985标准。而符合IEEE 754-1985,意味着FPU可以进行32bit单精度、64bit双精度、80bit扩展精度的浮点运算。虽然不是每个运算指令都可以在一个时钟周期内完成,但是32bit、64bit、80bit数据的执行效率并没有差别。
所以,综合下来,64位CPU只有在处理64bit宽的整数(或者定点数)的时候会比32位CPU有性能优势。但以现在的应用来说,使用这样的数据的概率真的很小。所以,单纯从32位和64位的区别来说,64位CPU比32位CPU在实际应用中的性能优势非常有限。
当然,今天的64位CPU会有更多的寄存器,配合64位操作系统可以使用4G以上内存,单个64位应用可以使用2G以上内存,都有助于提高应用性能。但这些并不是32位和64位CPU的本质差别导致,32位CPU也可以增加指令集并且使用更多的寄存器,一台计算机虽然使用64位CPU也可能只安装了2G内存。