单词大小是一个主要区别,但它不是唯一的区别.它倾向于定义一个CPU的"额定"位数,但字大小和总体性能只是松散相关.而整体能力才是最重要的.
在英特尔或AMD CPU上,32位与64位软件实际上指的是CPU运行时的运行模式.32位模式的可用寄存器和指令更少/更小,但最重要的限制是可用内存量.32-bit software is generally limited to using between 2GB and just under 4GB of memory
内存的每个字节都有一个唯一的地址,这与每个房子都有一个唯一的邮政地址没有太大区别.内存地址只是一个数字,程序一旦将数据保存在内存中,就可以使用它再次查找数据,内存的每个字节都必须有一个地址.如果一个地址是32位,那么有2^32个可能的地址,这意味着2^32个可寻址的内存字节.在今天的Intel/AMD CPU上,内存地址的大小与寄存器的大小相同(尽管并非总是如此).
对于32位地址,程序可以寻址4 GB(2^32字节),但是操作系统保留了多达一半的空间.放入可用存储空间必须适合程序代码、数据,通常还包括要访问的文件.在今天的个人电脑中,有许多千兆字节的RAM,这无法利用可用内存.这是64位变得流行的主要原因.64位CPU已经存在并被广泛使用了几年(通常是在32位模式下),直到大于2 GB的内存变得普遍,从那时起,64位模式开始提供现实世界的优势,并变得流行起来.64位的内存地址空间提供了16EB的可寻址内存(~18万亿字节),这超过了任何当前软件所能使用的容量,当然,没有一台PC拥有接近那么大的RAM.
典型应用中使用的大多数数据,即使在64位模式下,也不需要是64位的,因此大部分数据仍然以32位(甚至更小)格式存储.文本的常见ASCII和UTF-8表示使用8位数据格式.如果程序需要将一大块文本从内存中的一个位置移动到另一个位置,它可能会try 一次移动64位,但如果需要解释文本,它可能会一次移动8位.同样,32位是整数的常见大小(最大范围为+/-2^31,或大约+/-21亿).21亿的范围足以满足多种用途.图形数据通常是逐像素自然表示的,每个像素通常最多包含32位数据.
不必要地使用64位数据有一些缺点.64位数据在内存中占用更多空间,在CPU缓存中占用更多空间(CPU用于短期存储的非常快的内存).内存只能以最大速率传输数据,而64位数据是最大速率的两倍.如果浪费使用,这可能会降低性能.如果需要同时支持32位和64位版本的软件,在可能的情况下使用32位值可以减少这两个版本之间的差异,使开发更容易(但并不总是这样).
在32位之前,地址和字大小通常是不同的(例如,16位8086/88具有20位内存地址但有16位寄存器,或8位6502具有16位内存地址,甚至早期32位ARM具有26位地址).虽然没有程序员会对更好的寄存器嗤之以鼻,但内存空间通常是每一代先进技术的真正驱动力.这是因为大多数程序员很少直接使用寄存器,而是直接使用内存,内存限制直接导致程序员不愉快,在32位到64位的情况下,用户也不愉快.
综上所述,虽然不同的位大小之间存在着真正和重要的技术差异,但32位或64位(或16位或8位)means实际上只是一组功能,这些功能往往与特定技术代的CPU和/或利用这些功能的软件相关联.字长是其中的一部分,但不是唯一的部分,也不一定是最重要的部分.
来源:在所有这些技术时代都是程序员.