在我们深入之前,先让我们来了解一下一些64位计算的基本概念:
关于32位和64位,在我们探讨计算机程序员所说的“高层次”的差别(编程的差别)之前,先需要理解一些“低层次”的差别,我们要谈的焦点就是“word”。
正如我们此前解释的,一个word就是一组要被同时处理的数据信息组合,它可能是你运行的程序里的一些数据,也可能是处理这些数据的一个指令。大多数时候指令或数据都是很长的,所以会被分割成几个word来被CPU处理。
那么,如果一些指令很大,而一些指令很小,word的大小要多少才合适呢?它的决定因素是什么?
有些时候是历史、兼容方面的原因,另外还有一个很大的因素对其有决定作用,那就是处理器的寄存器(register)。
寄存器用来保存参加运算的操作数和中间结果,它是一个CPU可以同时处理的数据最大值。因为寄存器是CPU可以同时处理的最大数据长度,所以把word的大小设定为寄存器的大小就是很有必要的,这样一来,CPU就可以永远每次都处理标准同样大小的数据了。
以上是寄存器的原因,那么历史的原因是什么呢?其实就是因为,最早的x86处理器——8086,它的构架定为16 bits大小寄存器,这意味着每条指令、每块数据以及每个内存寻址都必须是16 bits的。
小提示:1汉字=2字节=16位=2byte=16bit
这些基本的老式处理器不像现在的处理器这么智能,它们不允许数据分成多个word来处理,使得处理器的处理能力受到了很大的限制(本来频率又低……),如果要处理的数据大于16 bits,它会被分割来处理,如果数据小于16 bits大小,就必须填充到16 bits大小处理器才可处理。
近年来处理器性能频率得到了极大的提升,也提出了“桥接word”的处理概念,但是x86构架处理器还是需要受16 bits大小word处理方式的限制。而为了满足我们对计算机处理大量数据的日益增长的需求,计算机工程师们就开发除了一种分段管线的处理概念——一次多发出几个16bit word来同时处理。
这个概念就产生了我们现在所听到的32位和64位的区别:一个32位的处理器可以同时处理双word数据(dwords),也就是两个16-bit数据同时处理;而一个64位处理器可以同时处理四个word数据(qwords),也就是四个16-bit数据被同时处理。
现代的处理器没有是直接利用16-bit word的,那么为什么还要保留这个古老的原则呢?答案很简单,这就是出于兼容性的考虑,x86构架的整个目的就是为了创建一个可以因循的标准,所以会带来很大的历史负担。一个真正的64位处理器(例如Itanium、SPARC等)一点都不知道如何处理16-bit word指令数据,正如同一个16位处理器不知如何处理64-bit数据一样——它们一点都不兼容。
|