Saq*_*ain 1 c++ optimization performance visual-studio-2010
我有两个几乎相同的循环,但在性能上有显着差异,都在MSVC2010上测试,系统~2.4 GHZ和8GB RAM
下面的循环需要大约2500毫秒才能执行
for (double count = 0; count < ((2.9*4/555+3/9)*109070123123.8); count++)
;
Run Code Online (Sandbox Code Playgroud)
这个循环执行时间不到1毫秒
for (double count = ((2.9*4/555+3/9)*109070123123.8); count >0; --count)
;
Run Code Online (Sandbox Code Playgroud)
这里有什么巨大的变化?一个得到后增量和其他使用预增量可以导致如此巨大的差异?
你正在编译而没有优化,因此比较是徒劳的.(如果你确实进行了优化,那么代码就会完全被删除).
在没有优化的情况下,计算可能在第一循环中的每次迭代时执行,而第二循环仅在第一次初始化时执行一次计算count.
尝试将第一个循环更改为
auto max = ((2.9*4/555+3/9)*109070123123.8);
for (double count = 0; count < max; count++)
;
Run Code Online (Sandbox Code Playgroud)
然后停止分析调试版本.