C / C ++,Windows控制台应用程序的速度取决于目标是32位还是64位?

时间:2010-06-17 15:11:25

标签: c++ c winapi performance win64

假设内存不是问题,针对64位操作系统会使C / C ++ Windows控制台应用程序运行得更快吗?

更新:由一些评论/答案提示,该应用程序涉及统计算法(例如,线性代数,随机数抽取等)。

6 个答案:

答案 0 :(得分:3)

答案可能是。你必须衡量。

使用64位目标允许使用更多寄存器,这意味着对内存的访问更少,从而更快地执行。

另一方面,使用64位目标强制所有指针和地址为64位,从而扩大了内存占用,并减慢了执行速度。

答案 1 :(得分:3)

主要回复编辑,而不是原始问题:我已经移植了一个重要的统计数据和(尤其是)线性代数作为64位代码运行的应用程序。对于该代码,努力是最小的,我们的速度提高了3:1。

我怀疑大多数人通常不会(通常是间接地)来自那些代码不容易移植的公司,并且正在尽力告诉客户为什么这是一个好主意继续购买他们的程序,即使它仍然是32位代码。在我移植的代码中(或者在大多数情况下只是“重新编译”) none 作为64位代码出现的速度更慢,而且大多数代码的速度至少要快一些。

答案 2 :(得分:1)

答案很可能。

当您对应用程序进行重大更改时,定位不同的平台肯定会对您的应用程序产生性能影响。它具有不同大小的语义,适用于类型,操作和非常不同的操作系统进行交互。

这些因素和许多其他因素肯定会导致应用程序的性能发生变化。无论是微妙的,巨大的,更好的,更糟糕​​的......等等都将高度特定于您正在编写的应用程序类型。如果没有更多细节,就不可能在这里给出一般答案。

答案 3 :(得分:0)

其他一切都是相同的(这是不太可能的)64位的额外数据大小(处理指针时要移动的数据的两倍)会导致它变慢。

但是其他因素(例如WOW开销)可能会占据主导地位......

唯一的方法是在您要定位的硬件上测试您的应用程序。

答案 4 :(得分:0)

如果大部分执行时间花在数学上,那么你可能会获得一个好处。在大多数情况下,情况并非如此。如果你正在进行核反应堆或光线追踪渲染的蒙特卡罗模拟,或类似的事情,你可能会看到一个很大的好处。我的SWAG“没什么好处”

答案 5 :(得分:-1)

可能更慢 - 你只是有效地减半了CPU缓存的大小

当然,英特尔和AMD的工程师都知道这一点,所以内存管理器做了很多工作来减少64位宽指针和整数的影响,只使用低32位