1

我得到了两个几乎相同的循环,但性能有显着差异,均使用 MSVC2010 在系统 ~2.4 GHZ 和 8GB RAM 上进行测试

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

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

这个循环在不到 1 毫秒的时间内执行

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

是什么在这里产生了如此巨大的差异?一个得到后增量,另一个使用前增量会导致如此巨大的差异吗?

4

2 回答 2

5

您在没有优化的情况下进行编译,因此比较是徒劳的。(如果您确实进行了优化,那么该代码将被完全删除)。

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

尝试将第一个循环更改为

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

然后停止分析调试版本。

于 2013-04-06T10:19:09.063 回答
2

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

于 2013-04-06T10:20:31.017 回答