导致在32位代码中使用64位变量会降低性能

时间:2014-10-09 14:24:40

标签: c++ 64-bit 32bit-64bit c++builder 32-bit

我使用Borland C ++ Builder 2009构建32位可执行文件。

我需要更改我的大部分代码,因为我需要将(至少)几乎所有对象的一个​​变量更改为64位变量,并且在计算等中使用了很多。

在执行此操作时,我经常面临这样的事实:对于使用的特定函数,不需要64位值,并且永远不需要(例如缓冲区大小限制,或仅使用可以使用的子范围)永远不要超过DWORD边界等。)所以我想,我是否应该改变这些例程。

或者在使用64位变量输入的函数中,也将其他函数范围变量更改为64位,或保持原样。

所以我想知道32位应用程序是否真的遭受了损失。从64位变量的使用与否?如果这是重要的或完全不相关的?如果是前者,我会尝试尽可能保留DWORD值。

2 个答案:

答案 0 :(得分:4)

操作大于寄存器的值通常需要更多的CPU周期,所以这可能会对性能产生很大影响,但要确定这是否与您的案例相关,无论如何都需要进行分析。

答案 1 :(得分:1)

"很多计算"究竟是什么?在几秒钟内进行几百次计算,或者在一个永无止境的循环中进行繁重的巨大矩阵运算?与类似的32位操作相比,64位算术加法和减法将使计算时间加倍。乘法可能相对成本更高,而且划分成本更高。

通常支持不同大小或不同符号的整数之间的赋值和算术,即使它可能导致精度损失或(可能是意外的)符号扩展扩展。同样的透明度可能会使您的工作变得轻松,也可能会给您带来一些模糊的问题。

我想你需要一个64位变量,因为你代表的值高于2G(或4G)。如果这样做,则不应尝试将它们分配给32位(或更短)变量。如果您怀疑它可能发生,您应该更改所有涉及的变量或属性,或使用断言来防止意外的精度损失。

如果您没有混合使用有符号和无符号变量,则较短到较大的分配应始终正常。

语言功能(例如运算符重载或模板和模板实例化)可能需要特殊考虑。