假设内存不是问题,以 64 位操作系统为目标是否会使 C/C++ Windows 控制台应用程序运行得更快?
更新:在一些评论/答案的提示下,应用程序涉及统计算法(例如,线性代数、随机数抽取等)。
假设内存不是问题,以 64 位操作系统为目标是否会使 C/C++ Windows 控制台应用程序运行得更快?
更新:在一些评论/答案的提示下,应用程序涉及统计算法(例如,线性代数、随机数抽取等)。
答案是也许。你必须测量。
使用 64 位目标允许使用更多寄存器,这意味着对内存的访问更少,因此执行速度更快。
另一方面,使用 64 位目标会强制所有指针和地址为 64 位,从而扩大内存占用并减慢执行速度。
主要回答编辑,而不是最初的问题:我已经移植了一个应用程序,它对统计和(尤其是)线性代数很重,以作为 64 位代码运行。对于该代码,工作量很小,而且我们的速度提高了大约 3:1。
我怀疑大多数情况下通常不会(通常是间接地)来自那些拥有不容易移植的代码的公司,并且正在尽最大努力告诉客户为什么继续购买是个好主意他们的程序,即使它仍然是 32 位代码。在我移植的代码中(或者在大多数情况下只是“重新编译”),没有一个比 64 位代码更慢,而且大多数都至少快一点。
答案是一个很大的可能。
当您对应用程序进行重大更改时,针对不同的平台肯定会对您的应用程序产生性能影响。对于类型、操作和非常不同的操作系统进行交互,它具有不同的大小语义。
这些因素和许多其他因素肯定会导致您的应用程序的性能发生变化。无论是微妙的、巨大的、更好的、更糟的等等……都将高度特定于您正在编写的应用程序的类型。如果没有更多细节,不可能在这里给出一般性的答案。
其他一切都相同(这不太可能)64 位的额外数据大小(处理指针时要移动的数据量的两倍)会导致预期它会变慢。
但是其他因素(例如 WOW 开销)可能会主导事情......
唯一的方法是在您的目标硬件上测试您的应用程序。
如果大部分执行时间都花在数学上,那么您可能会从中受益。在大多数情况下,这是不正确的。如果您正在对核反应堆或光线追踪渲染或类似的东西进行蒙特卡罗模拟,您可能会看到很大的好处。我的 SWAG 是“没什么好处”
可能更慢 - 您刚刚有效地将 CPU 缓存的大小减半
当然 Intel 和 AMD 的工程师知道这一点,因此内存管理器做了很多工作来减少 64 位宽指针和整数的影响,其中只使用低 32 位