C++ 两个几乎相同的循环中的性能差异

C++ 两个几乎相同的循环中的性能差异,c++,visual-studio-2010,performance,optimization,C++,Visual Studio 2010,Performance,Optimization,我得到了两个几乎相同的环路,但在性能上有显著差异,都是在2.4 GHZ和8GB RAM系统上用MSVC2010测试的 下面的循环执行大约需要2500毫秒 for (double count = 0; count < ((2.9*4/555+3/9)*109070123123.8); count++) ; 是什么造成了如此巨大的差异?一个使用后增量,另一个使用前增量,这会导致如此巨大的差异吗?您在编译时没有进行优化,因此比较是徒劳的。如果您确实进行了优

我得到了两个几乎相同的环路,但在性能上有显著差异,都是在2.4 GHZ和8GB RAM系统上用MSVC2010测试的

下面的循环执行大约需要2500毫秒

for (double count = 0; count < ((2.9*4/555+3/9)*109070123123.8); count++)
;                   

是什么造成了如此巨大的差异?一个使用后增量,另一个使用前增量,这会导致如此巨大的差异吗?

您在编译时没有进行优化,因此比较是徒劳的。如果您确实进行了优化,那么这些代码将被完全删除

在没有优化的情况下,计算很可能在第一个循环的每次迭代中执行,而第二个循环在第一次初始化count时只执行一次计算

尝试将第一个循环更改为

auto max = ((2.9*4/555+3/9)*109070123123.8);
for (double count = 0; count < max; count++)
;   

然后停止评测调试版本。

您在编译时没有进行优化,因此比较是徒劳的。如果您确实进行了优化,那么这些代码将被完全删除

在没有优化的情况下,计算很可能在第一个循环的每次迭代中执行,而第二个循环在第一次初始化count时只执行一次计算

尝试将第一个循环更改为

auto max = ((2.9*4/555+3/9)*109070123123.8);
for (double count = 0; count < max; count++)
;   

然后停止分析调试生成。

在第一个循环中,每次循环计算一次计数<2.9*4/555+3/9*109070123123.8,其中第二个计数=2.9*4/555+3/9*109070123123.8,每次循环计算一次并递减

在第一个循环中,每次在循环中计算<2.9*4/555+3/9*109070123123.8,其中在第二个循环中,计算一次=2.9*4/555+3/9*109070123123.8,每次在循环中递减

如果启用优化,booth循环将崩溃为零,因此需要0时间。不要试图在优化关闭的情况下衡量性能-1当不使用至少最微不足道的优化时,谈论性能是没有意义的。1ms不是性能的变化。您必须提及您使用它所取得的成就,即MFLOPS标准阵列或MLUPS网格计算。让我们考虑for循环是如何工作的。步骤1:为变量赋值。步骤2:检查条件是否为真,执行代码块步骤3:递增步骤4:重复步骤2和步骤3。在第一个循环中,您需要为每次迭代计算表达式的值,在第二个循环中,您只需进行一次计算。如果启用优化,booth循环将崩溃为零,因此需要0时间。不要试图在优化关闭的情况下衡量性能-1当不使用至少最微不足道的优化时,谈论性能是没有意义的。1ms不是性能的变化。您必须提及您使用它所取得的成就,即MFLOPS标准阵列或MLUPS网格计算。让我们考虑for循环是如何工作的。步骤1:为变量赋值。步骤2:检查条件是否为真,执行代码块步骤3:递增步骤4:重复步骤2和步骤3。在第一个循环中,您需要为每个迭代计算表达式的值,而在第二个循环中,您只需进行一次计算。