gpt4 book ai didi

c++ - 为什么具有多个嵌套循环的代码可以在 GCC 上立即完成,但在 VS 上却需要永远?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:28 25 4
gpt4 key购买 nike

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++;
}
}
}
}

此代码在 i3Core 上执行时间为 0.000001 秒,在 i7Core 上使用 boost::timer::auto_cpu_timer 进行了检查。

但是对于 visual studio 2010,它似乎可以无限期地运行。

GCC 或 VS 有什么问题? GCC 优化过度了吗?

最佳答案

是的,GCC 正在优化该代码。

具体来说,它知道您没有使用结果,所以它会删除所有结果。
(您永远不会使用变量 r。)

这叫做 Dead Code Elimination .

为了防止编译器优化它,您需要以某种方式使用结果。尝试在最后打印出 r:

cout << r << endl;

但是,我警告您需要减少迭代次数,否则它可能在您的一生中无法完成。


我刚刚在 VS2010 x64 中对此进行了测试。查看程序集,很明显 VS2010 无法优化整个循环

这表明不同的编译器优化不同事物的能力各不相同。


相关且更深入:How does GCC optimize out an unused variable incremented inside a loop?

关于c++ - 为什么具有多个嵌套循环的代码可以在 GCC 上立即完成,但在 VS 上却需要永远?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9679451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com