笼统地讲,64位指的是CPU指令最大可以一次处理8个字节,因此这里的64位指的是数据位数,而不是寻址位数。就CPU设计角度上讲,为了更好地支持间接寻址,地址位数应尽量与数据位数一致。但从计算机系统总体设计角度上讲,实际地址总线宽度的设计还要考虑成本及兼容性之类的制约,比方说,很有可能数据处理是64位的,寻址处理有可能却是32位的(可提供4G的寻址空间)。当然也可以设计为更多如 128位的,但地址位数高于数据位数的话在间接寻址时会导致无法直接用通用寄存器保存完整的地址,如以前Intel 在16位CPU上不得不通过段寄存器来保存大于16位的地址,所以通常在设计时地址位数都小于或等于数据位数。
因此,同样的64位CPU,它实际提供的寻址能力可能是不同的,这取决于CPU设计时确定的地址总线位数。这就是普通的消费级64位CPU其实际提供的寻址空间远远没有达到最大值(2^64)的原因,因为对于消费级CPU而言,暂时用不上如此庞大的寻址空间,如果地址位数按最大值设计,CPU无论内部等效晶体管数还是外部引脚数,以及和总线上其它设备的交互都会出现性能上的浪费(如对于小规模的IO设备通常会造成大量地址线悬空),除了增加CPU制造工艺上的难度以外益处不大。
因为多媒体之类的应用已经变得很普遍,解决32位寻址在4G上的限制显得尤为迫切,所以64位CPU才开始盛行,这里需要说明的是,64位CPU的性能并不是32位CPU的两倍,受限于编译器和操作系统的具体实现上的限制,如指针位数和地址对齐之类,以及实际计算规模,如单字节运算之类等,64位CPU的在某些场合下其执行效率是不如32位CPU的。这也就是为什么很多软件的64位版本还不如32位版本运行的快的原因之一。
再多说几句:相对而言,CPU的位数发展取决于运算规模,而CPU主频发展则取决于运算速度。现阶段CPU的发展的瓶颈主要受限于CPU制造工艺的制约导致的CPU主频不能无限拔高,因主频过高会导致CPU发热过大,因此不得不采用并行运算来以空间换时间,这也就是多核CPU这种“准并行运算”CPU出现的原因,这是因为CPU制造工艺的发展满足不了人们日益增长的对CPU运算速度的需求而不得不使用的权宜之计。
因此,同样的64位CPU,它实际提供的寻址能力可能是不同的,这取决于CPU设计时确定的地址总线位数。这就是普通的消费级64位CPU其实际提供的寻址空间远远没有达到最大值(2^64)的原因,因为对于消费级CPU而言,暂时用不上如此庞大的寻址空间,如果地址位数按最大值设计,CPU无论内部等效晶体管数还是外部引脚数,以及和总线上其它设备的交互都会出现性能上的浪费(如对于小规模的IO设备通常会造成大量地址线悬空),除了增加CPU制造工艺上的难度以外益处不大。
因为多媒体之类的应用已经变得很普遍,解决32位寻址在4G上的限制显得尤为迫切,所以64位CPU才开始盛行,这里需要说明的是,64位CPU的性能并不是32位CPU的两倍,受限于编译器和操作系统的具体实现上的限制,如指针位数和地址对齐之类,以及实际计算规模,如单字节运算之类等,64位CPU的在某些场合下其执行效率是不如32位CPU的。这也就是为什么很多软件的64位版本还不如32位版本运行的快的原因之一。
再多说几句:相对而言,CPU的位数发展取决于运算规模,而CPU主频发展则取决于运算速度。现阶段CPU的发展的瓶颈主要受限于CPU制造工艺的制约导致的CPU主频不能无限拔高,因主频过高会导致CPU发热过大,因此不得不采用并行运算来以空间换时间,这也就是多核CPU这种“准并行运算”CPU出现的原因,这是因为CPU制造工艺的发展满足不了人们日益增长的对CPU运算速度的需求而不得不使用的权宜之计。