32位与64位
1、32位和64位的电脑系统
现在市面上正在使用的操作系统主要是64位的,已经很少有人在使用32位的操作系统了。
不同点:
①目标用户不同。64位操作系统的是为满足机械设计和分析、三维动画、视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的客户而设计得,换句简明的话说就是:它们是高科技人员使用本行业特殊软件的运行平台,它可以提供较为强劲的性能。而32位操作系统是传统的操作系统,为普通用户设计的。
②要求配置不同。64位操作系统只能安装在64位电脑上(CPU必须是64位的),同时需要安装64位常用软件以发挥64位(x64)的最佳性能。32位操作系统则可以安装在32位(32位CPU)或64位(64位CPU)电脑上。如果32位操作系统安装在64位电脑上,其硬件恰似“大马拉小车”:64位效能就会大打折扣。
③运算速度不同。64位CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据(只要两个指令,一次提取8个字节的数据),比32位(需要四个指令,一次提取4个字节的数据)提高了一倍,理论上性能会相应提升1倍。
④寻址能力不同。64位处理器由于地址使用的是特殊的整数,因此一个ALU(算术逻辑运算器)和寄存器可以处理更大的整数,也就是更大的地址。比如,Windows Vista x64 Edition支持多达128 GB的内存和多达16 TB的虚拟内存,而32位CPU和操作系统最大只能支持4G内存。
⑤软件普及不同。目前,64位常用软件比32位常用软件要少得多的多。原因很简单:使用64位操作系统的用户相对较少。但是值得注意的一点是32位的应用程序也可以运行在64位的电脑上,反之则不成立。
⑥未来。不管怎样64位的操作系统是32位操作系统的下一代,有着更为突出的性能,这将是操作系统的未来。随着时间的推移,64位操作系统对于硬件的要求会逐渐被淡化,而32位操作系统也将退出大众的视野,就好像前些年几十M的U盘一样。
2、关于32位和64位的编译器
16位编译器:
int: 2个字节(8个比特位,最大范围0111 1111 1111 1111 为32767)
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
32位编译器:32位系统下指针占用4字节
char:1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
shortint :2个字节
int: 4个字节
unsigned int: 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
longlong: 8个字节
unsigned long: 4个字节
64位编译器:64位系统下指针占用8字节
char:1个字节
char*(即指针变量): 8个字节
shortint :2个字节
int: 4个字节
unsigned int: 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
longlong: 8个字节
unsigned long: 8个字节
3、32位和64位的误解
①. 64位一定比32位好
其实,这还是个因人而异的问题,就一般的上网浏览、办公和普通游戏而言,32位系统应付绰绰有余。但对于一些需要大内存的用户而言,64位会是更好的选择。另外,毫无疑问的是,64位确实是发展趋势和潮流。
②. 64位兼容性不如32位
很多人会误以为某些32位程序会无法在64位系统上运行,而事实上,64位系统上会提供一个名为Program
Files(x86)的文件夹,里面的程序就是32位应用程序。而Windows 7 64位就内置有32位和64位两个版本的IE
8。同时,32位程序在任务栏管理器里会显示为XX.EXE *32。甚至于,某些情况下64位的程序兼容性还要优于32位。比如,印象中此前AION是无法在32位Windows 7运行的,但64位下却毫无问题。
③. 64位软件性能高于32位
这也是对64位认识中最容易陷入的误区。针对此问题,Adobe公司的John
Nack专门在其博客上发文做了解释,他首先援引了Apple开发者文档中的原文:
“对于大多数开发者而言,将他们的代码打包为64位程序并不会带来任何优势。除非程序需要的内存大于4GB,否则打包成64位程序不仅不会带来性能提升,反而会造成性能下降。”
随后,John再次引用Apple's 64-bit Transition Guide中的原文对此进行了解释:
“流言:原生支持64位的程序运行更快
④.事实: 某些64位程序在64位Intel架构上因为缓存压力的关系运行更慢
在64位Intel架构机器上,64位程序由于原生支持64位代码的关系可能会带来一些性能上的提升,但是由于缓存压力的加大,这样提升往往还不足以弥补缓存压力带来的性能下降。
4、cpu的运算位数
CPU的位宽对CPU性能的影响绝不亚于主频。位宽是指微处理器一次执行指令的数据带宽。处理器的寻址位宽增长很快,业界已使用过4、8、16位寻址再到目前主流的32位,而64位寻址浮点运算已经逐步成为CPU的主流产品。
32位处理器的缺陷
受虚拟和实际内存尺寸的限制,目前主流的32位CPU在性能执行模式方面存在一个严重的缺陷:当面临大量的数据流时,32位的寄存器(注:为了处理数据,暂时储存结果,或者做间接寻址等等动作,每个处理器都具备一些内建的内存,这些能够在不延迟的状态下存取的内存就称为“寄存器”,每个寄存器的大小都相同)和指令集不能及时进行相应的处理运算。
64位处理器的优势
32位CPU一次只能处理32位,也就是4个字节的数据;而64位CPU一次就能处理64位即8个字节的数据。如果我们将总长128位的指令分别按照16位、32位、64位为单位进行编辑的话:旧的16位CPU(如Intel 80286 CPU)需要8个指令,32位的CPU需要4个指令,而64位CPU则只要两个指令。显然,在工作频率相同的情况下,64位CPU的处理速度比16位、32位的更快。
64位的代码流的数量没有改变,其宽度随着指令代码的宽度而变化;而数据流的宽度则增加了一倍。虽然理论上在一个时钟周期内64位系统处理的数据量是32位系统的两倍,但理论和现实通常都是有差距的。
要注意的是,CPU不只需要位宽够宽的寄存器,也需要足够数量的寄存器,以确保大量数据处理。因此为了容纳更多的数据,寄存器和内部数据通道也必须加倍,因此在64位CPU中的寄存器位数一般是32位CPU中的两倍。
不过,虽然寄存器位数增加了,但正在执行指令的指令寄存器却都是一样的,即数据流加倍而指令流不变。此外,增加数据位数还可以扩大动态范围。在通常使用的十进制中,只能得到最多10个整数(一位数情况下),这是因为0~9中只有10个不同的符号来表示相应的意思,想要表示10以上的数就需要增加一位数,两位数(00-99)才可以表示100个数。
可以得出十进制的动态范围的计算公式:DR=10^n (n表示数字位数)。在二进制体系中,相应的我们可以得到公式:DR=2^n,那么32位就可以达到2^32=4.3×109,升级到64位之后,就可以达到2^64=1.8×1019。动态范围扩大了43亿倍。
提示:扩大动态范围可以在一定程度上提高寄存器中数据的准确性。比如,当使用32位系统处理气象模拟运算任务时,当处理的数据超过32位所能提供的最大动态范围时,系统就会出现诸如Overflow(超过了最大正整数)或Underflow(低于最小的负整数)的错误提示,这样寄存器中的数据就无法保证准确。
除了运算能力之外,与32位CPU相比,64位CPU的优势还体现在系统对内存的控制上。由于地址使用的是特殊的整数,而64位CPU的一个ALU(算术逻辑运算器)和寄存器可以处理更大的整数,也就是更大的地址。
传统32位CPU的寻址空间最大为4GB,使得很多需要大容量内存的大规模的数据处理程序在这时都会显得捉襟见肘,形成了运行效率的瓶颈。而64位的处理器在理论上则可以达到1800万个TB(1TB=1024GB),将能够彻底解决32位计算系统所遇到的瓶颈现象。
64位处理器的缺点
64位寻址空间也有一定的缺点:内存地址值随着位数的增加而变为原来的两倍,这样内存地址将在缓存中占用更多的空间,其他有用的数据就无法载入缓存,从而引起了整体性能一定程度的下降。