Den*_*lin 5 c++ optimization gcc compiler-optimization visual-studio
long long r = 0;
long long k = 0;
for (; k < 9999999999999; k++)
{
for (long long i = 0; i < 9999999999999; i++)
{
for (long long j = 0; j < 9999999999999; j++)
{
r = (r + (i * j) % 100) % 47;
if (r != 0)
{
r++;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
此代码在i3Core上以0.000001壁秒执行,在i7Core boost::timer::auto_cpu_timer上检查.
但是对于visual studio 2010来说,它似乎在无限的时间里运行.
GCC或VS出了什么问题?GCC优化太多了吗?
Mys*_*ial 15
是的,GCC正在优化该代码.
具体来说,它知道您没有使用结果,所以它正在删除所有结果.
(你永远不会使用变量r.)
这称为死代码消除.
为了防止编译器对其进行优化,您需要以某种方式使用结果.尝试r在最后打印出来:
cout << r << endl;
Run Code Online (Sandbox Code Playgroud)
但是,我警告您需要减少迭代次数,否则它可能无法在您的生命周期内完成.
我刚刚在VS2010 x64中对此进行了测试.看一下装配,显然VS2010无法优化整个循环.
它表明不同的编译器在优化不同事物的能力方面各不相同.
相关,更深入:GCC如何优化循环中递增的未使用变量?
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |