【发布时间】:2011-03-21 14:30:49
【问题描述】:
64 位应用程序相对于 32 位应用程序的性能优势的来源是什么?我假设有性能优势,因为像 WinRAR 这样的程序会宣传它。
另外,我们是否可以通过切换到 64 位编译器来获得这些性能优势,或者是否需要对代码进行任何更改?
欢迎提供与非托管和托管代码相关的答案。
【问题讨论】:
标签: performance 64-bit
64 位应用程序相对于 32 位应用程序的性能优势的来源是什么?我假设有性能优势,因为像 WinRAR 这样的程序会宣传它。
另外,我们是否可以通过切换到 64 位编译器来获得这些性能优势,或者是否需要对代码进行任何更改?
欢迎提供与非托管和托管代码相关的答案。
【问题讨论】:
标签: performance 64-bit
为了利用最新 CPU 的 64 位架构,您必须:
【讨论】:
这里有一些很棒的答案。
如上所述,您可以访问无限的 RAM,这将有助于提高性能如果您需要。
我会谦虚地补充一下如果你不需要它,但无论如何都要使用它,它会损害性能。
永远不要忽视最古老的科学定律之一:
大自然厌恶真空
【讨论】:
x64 架构使 x86 架构中可用的通用寄存器数量翻倍,因此编译器能够将更多数据保存在(非常快的)CPU 寄存器中,而不是保存在(相对较慢的)RAM 中。
【讨论】:
他们什么时候停止在广告中撒谎?我错过了什么? ;-)
主要的性能优势在于,在 64 位系统中,您可以分配超过 4GB 的 RAM(实际上在大多数系统上超过 2GB)而无需交换。这是一个巨大的速度优势如果你需要它。
因此,如果您的应用程序需要大量 RAM(图像/视频/音频处理、世界/宇宙模拟),那么 64 位将具有优势。
除此之外,64 位 CPU 还具有对 64 位数据类型进行操作的命令(因此您无需模拟 32 位类型的命令)。这也是一个优势,但它 a)不是那么大,因为您的算法需要使用这些类型而大多数不需要 b)它们仍然比 32 位类型慢(但比仿真快)。
给你一个想法,这里有一个超级计算机专家的老笑话:“从磁盘加载数据需要一天,然后程序需要五分钟来处理数据,然后我们需要另一天来保存数据结果到磁盘”。从 RAM 读取数据比访问磁盘快 1000 到 1000000 倍。
总而言之,对于普通用户来说,64 位系统几乎没有优势。
【讨论】:
int 通常也是 32 位的,因为如此多的代码取决于它是 32 位的。 long 是另一回事,但有编译器选项可以使其成为 32 位和 long long 64 位。也就是说,使用通常远低于 100000 的 64 位循环计数器有什么优势?
我的理解是,在大多数情况下,除了使用更多内存的能力之外,没有性能提升。 (尽管如果您经常使用 64 位数据类型,它可能会提供更高的性能)。
【讨论】: