32位/ 64位编译和应用程序速度

时间:2012-10-17 22:39:46

标签: performance 64-bit 32-bit

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

但是,还有其他差异吗?我知道有些程序有两种不同的Windows版本可供下载,一种用于64位,一种用于32位。为什么他们提供两种不同的类型?编译具有64位依赖性的程序以使程序在64位系统上运行是否会加速?

3 个答案:

答案 0 :(得分:1)

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

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

司机是第二个例子。

当谈到速度时,当然会有所不同。这在很大程度上取决于程序的功能。如果程序不需要高性能,那么提供x64可执行文件就无济于事,对于开发人员而言,这对用户来说都是浪费时间。

这是导致64位操作系统上32位情况的性能差异的原因:

  1. 由于模式切换而导致内核通话成本增加
  2. 更多寄存器,更高的代码大小:对于计算密集型程序,这非常有利于本机64位应用程序。对于其他类型的应用程序,或者对于商务风格的Web应用程序,较大的代码和指针大小可能会导致净丢失(因此比32位慢64位!)
  3. 访问超过3GB的内存。这显然在2012年很少发挥作用。想想数据库,Photoshop,......

答案 1 :(得分:0)

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

对于x86_64,内存指针现在也是64位宽而不是32位,这意味着程序可以处理更多的内存。但是,代码占用磁盘和内存空间的大约两倍;如果你的64位系统缺乏内存,那么交换可能会更糟糕。

答案 2 :(得分:0)

大多数语言的表现大致相同。

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