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

时间:2013-04-06 10:17:06

标签: c++ visual-studio-2010 performance optimization

我有两个几乎相同的循环,但性能上有显着差异,两者都在MSVC2010上进行测试,在系统~2.4 GHZ和8GB内存

低于循环需要大约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)
;

这里有什么巨大的差异?一个得到后增量和其他使用预增量可以导致如此巨大的差异?

2 个答案:

答案 0 :(得分:5)

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

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

尝试将第一个循环更改为

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

然后停止分析调试版本。

答案 1 :(得分:2)

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