2012-10-17 68 views
0

我刚刚得到一台新的64位计算机,我仍试图了解32位和64位之间的差异。我了解使用64位依赖项构建的应用程序只能运行在64位上,但使用32位依赖项构建的应用程序可以在32位和64位系统上运行。32位/ 64位编译和应用速度

但是,还有其他的区别吗?我知道一些程序有两种不同的windows版本可供下载,一种是64位,一种是32位。为什么他们提供两种不同的类型?编译64位系统上运行的程序时,速度是否会提高?

+0

将代码移植到64位系统。优点和缺点 - http://www.viva64.com/en/l/0003/ – 2012-10-18 05:14:59

回答

1

除了速度,一些程序没有选择。他们需要准确地匹配主机操作系统的位数。

一个很好的例子是安装shell扩展的TortoiseSVN。外壳扩展是DLL加载到其他进程。所以如果TortoiseSVN想提供一个外壳扩展,它必须在x64系统上提供一个64位的DLL。

驱动程序是第二个例子。

说到速度,当然是有区别的。这很大程度上取决于程序的功能。如果一个程序不要求高性能,提供x64可执行文件不会有帮助,并且对于两个开发人员来说都是浪费时间,就像用户一样。

这里是什么原因导致的情况下,32位在64位操作系统的性能差异:

  1. 因为模式开关
  2. 多个寄存器,更高的代码大小的高等内核通话费用:对于计算密集这个程序大大有利于原生64位应用程序。对于其他类型的应用程序或商业风格的Web应用程序,更大的代码和指针大小可能会导致净损失(因此比64位慢32位!)
  3. 访问超过3GB的内存。这显然在2012年很少发挥作用。想想数据库,Photoshop,...
+0

谢谢你,很好地回答了问题。 – LucasS

+0

这个答案在Windows上是正确的,但在OSX上不是这样。32位应用程序在64位OSX上运行良好,并且每个应用程序都为64位(具体来说,32位dyld共享缓存将不会被加载,节省> 100MB的IO和内存)显着优势 –

+0

Plus Apple改进了Objective-C运行时,他们将它设置为64位,添加了一些功能,如果他们不得不担心32位向后兼容性,这些功能是不可行的。 – echristopherson

0

速度增加取决于应用程序的功能,正如usr所说。但从根本上来说,64位CPU能够在相同的时间内处理两倍于32位数据的数据;但是这样做的机器指令是针对64位处理器的,因此必须重新编译现有的本机程序(至少)以显示其优点。

在x86_64的情况下,内存指针现在也是64位而不是32位,这意味着程序可以处理更多的内存。但是,代码在磁盘和内存中所占空间大约是其两倍。如果你在一个内存不足的64位系统上,交换可能会更糟糕。

+0

虽然这是事实,但这很具误导性。它们处理两倍的位数,但不是两倍的值。在单个整数需要超过32位来表示的情况下,操作将是(所有其他部分相同)加速,然后32位机器将显着减速,而64位则不会。 –

+0

(当然,你也可以同时处理两个或更多的32位数字,但这与64位处理器无关。这与MMX/SSE [n]/Altivec相关) –

+0

我正在考虑更多像复制超过32位内存的东西。但现在我想到了,这可能是用DMA或其他方法完成的;我不确定这些日子公交车宽度如何影响。 – echristopherson

0

大多数语言的性能大致相同。

去64位的主要原因是可寻址内存。 A32位进程只能访问2 GB的数据,但64位进程可以访问18个字节的字节数(这比您可以放入机器的RAM数量多)。