64位系统的优点

时间:2011-01-29 23:07:38

标签: c++ performance architecture 64-bit cpu-architecture

从开发人员的角度来看,我试图理解,64位系统的卖点是什么?

据我所知,您可以使用更多寄存器,可以为进程分配更多内存,但我无法理解是什么让开发人员的生活变得更轻松。有什么例子吗?

从性能的角度来看,如果一个程序运行在32位对64位上,会有什么好处吗?

干杯!

编辑:谢谢你的回复。我看到一些针对最终用户体验的对话,这很重要。我正在寻找更多可以挤出的建筑优势。

根据我的理解,看起来编译器 - 汇编程序链上的优化很多,而不是程序员可以调用的功能?

7 个答案:

答案 0 :(得分:9)

当你有64位的地址空间可供使用时,你可以采用某些设计,这些设计在地址空间较小的情况下非常困难。例如,一位朋友最近向我指出,线程堆栈的地址空间可能成为32位系统上数千个线程的问题。但是在64位系统上,这甚至不再是一个问题。这是开发人员的主要直接好处,可能会影响您编写程序的方式。无论机器有多少实际内存,都是如此。

由于可用的额外寄存器,我看到转换为64位的大多数程序都有性能提升。

具有64位地址可以抵消某些程序中的性能提升。额外的空间指针占用意味着他们需要更多的缓存,这为您的缓存留下了更少的空间用于其他事情。当它们传输到主存储器和从主存储器传输时,它们占用更多的存储器总线带宽。

至少有一个项目建议在某种混合模式下重新编译Linux中的大多数程序,其中使用了所有额外的寄存器,但只使用了32位指针。我很感兴趣,因为它消除了64位程序的一个性能劣势。

还有一个小的(但很重要的)程序和算法子集可以使用64位寄存器。例如,大多数SHA-3 candidates旨在利用在执行按位运算时一次操作64位数据的能力。

最后,由于CPU内部的数据路径现在是64位宽,这也意味着CPU内部有更多的带宽用于移动物体。但我希望这对在32位模式下运行的64位CPU也有好处。

答案 1 :(得分:1)

正如你所说,更多的记忆可能是一个很大的优势。对于32位系统,您将被限制为最大4GB的进程(甚至2或3,取决于您的操作系统有多烦人)。

64位是每条指令的两倍字节数,因此内部有更多的带宽。例如:更快的一切。

另见: http://lifehacker.com/5431284/the-lifehacker-guide-to-64+bit-vs-32+bit-operating-systems

答案 2 :(得分:1)

当您运行多个流程时,例如调试会话,编译器和其他工具如果您的系统中有大量RAM,您会注意到性能的巨大提升。我的Win7系统中有16GB内存,我永远不会再少用。它有点像你开始使用双显示器,之后还不够。

答案 3 :(得分:1)

一些Mac OS X的具体答案(其他答复中涵盖了一般答案):

1)在32位OSX中,地址空间被映射为4/4(即内核获得完整的2 ^ 32并且每个应用程序都这样做),这需要在每个系统调用上刷新TLB两次。在64位中,有足够的空间将内核和应用程序映射到不同的地址范围。

2)Objective-C程序在64位x86机器上使用新的ABI /运行时。这将使您获得C ++兼容的异常,非脆弱的实例变量和一些加速。

答案 4 :(得分:0)

64位系统具有64位存储器地址而不是32位地址,因此可用的最大内存量为2 64 vs 2 32 。第一个数量大约是10个 18 字节,而后者的数量可以是10个 9 个字节。因此,在64位系统中可以有更多的内存。

答案 5 :(得分:0)

除了图像或视频处理应用程序之外,大多数桌面应用程序实际上不需要是64位二进制文​​件。相比之下,服务器应用程序经常这样做。

在64位计算机上运行的最大好处是,您的应用程序将拥有更多的RAM空间,因此当其他应用程序需要RAM时,它不会被交换掉。然而32位应用程序在64位机器上运行(幸运的是)。我正在16GB Linux笔记本电脑上输入2个数据库(Oracle 11g和Mysql 6.0alpha),VirtualBox中的Windows和一些Java虚拟机,eclipse与Xmx = 2GB ......)我无法填写所有这些4GB。然而,当我们不需要大量的内存空间时,我仍然喜欢运行32位应用程序。

答案 6 :(得分:0)

抱歉,我保留了一些列表样式,并且避免不提及增加的内存寻址以及已经提到的更多内容。

a)您的寄存器数量会增加一倍,实际上可以为您提供三倍的寄存器数量。 b)通用寄存器从32位增加到64位,这意味着64位整数(即)的处理速度会更快。 c)更有效的位置无关代码,因为现在可以相对于RIP寄存器引用数据。 d) No-execute bit使系统更容忍缓冲区溢出。