一般来说,CPU的位宽指的是数据总线的宽度。
这个你可以这么推想:
CPU的地址总线宽度决定了寻址范围,数据总线决定了单次能取出的数据的长度。
决定CPU的性能的话,数据总线和地址总线谁更能决定这个性能呢?
当然是数据总线嘛,你64位数据总线一次就能取出64bit的数据,8位数据总线的CPU一次只能取出8bit的数据,在相同频率的情况下,8位数据总线的CPU就得连续取8次数据,数据量才能和64位数据总线一次取出的数据量相同,是不是性能差8倍呢。这里还不关心取到数据后处理数据的性能问题,但就说取数据的性能问题,就差8倍。
地址总线宽度不是直接影响到性能的参数。给个例子:
假如说有个36位地址总线宽度、32位数据总线宽度的A型号的CPU,
假如还有个32位地址总线宽度、32位数据总线宽度的B型号的CPU。
你觉得这两个型号的CPU性能上能差到哪吗?只不过B型号的CPU地址超过了32位可能就不行能,也可能需要用其他的方式组合出更长位宽的地址来,总之不如A型号直接、高效。但是,只要不是这样的情况,A和B的其他因素相同,你觉得A和B两个CPU的性能差到哪吗。
其实,intel的x86CPU就刚好有这样的情况,36位地址总线宽度、32位数据总线宽度,寄存器是32位的,你会想,那寄存器放不下36位的地址,那怎么办呢,其实它是用某种方法组合出来的36位地址,段地址32位向高位偏移4位后加上偏移地址,就出来36位的地址。
一般,寄存器的宽度和数据总线宽度是一致的,地址总线可以通过某种方式组合出来,所以可以不一致。毕竟寄存器绝大部分时间是要存储和处理数据的,不是吗,地址作为数据使用的情况在整个程序运行中占的时间是很少数的。
另外,操作系统的位宽应该指的是编译时使用的是32位指令集还是64指令集(这里就只说x86体系的吧,IA32和IA64这个比较多,其他体系结构的我也不是很清楚。),首先硬件CPU要是能支持足够的位宽,不过现在的inter和AMD的IA64体系的CPU都支持64位,为了兼容之前的软件体系,当然也支持32位的指令集。只是32位的操作系统和32位的软件,使用的是32位的指令集,没有用到64位的指令集,CPU上运行的是32位的指令集,但不是说它不能运行64位的指令集,而是软件它自己用的是32位,没用64位。如果这类比于ARM的32位ARM指令集和Thumb指令集就会很清楚了。
目前很多软件都是老的32位指令的软件,运行的是32位指令集,还没用跟上CPU,所以64位的操作系统上还不能像32位XP那样很好的运行全部的软件。