gpt4 book ai didi

c++ - 令人费解的编译器优化结果

转载 作者:行者123 更新时间:2023-11-28 00:16:50 26 4
gpt4 key购买 nike

如果我尝试像这样运行一个循环:

int i;

for (i = 0; i < 1e9; i++)
{
1 + 1;
}

编译器将其完全优化,甚至不运行它。但是,如果我将 int i 设置为静态,那么它会继续运行循环,即使我进行了更高的迭代也是如此。这是在 Visual Studio 2013 中,在 Release模式下打开了优化。

最佳答案

很明显,循环体是一个空操作。循环的唯一作用是更改i 的值。当i有自动存储时,编译器可以证明i的值在循环后永远不会被读取。因此,整个循环没有任何效果,可以丢弃。

但是,当 istatic 时,它的生命周期会超出函数的单次调用。因此,i的值是一个副作用,不能丢弃循环。

您可能会争辩说,编译器可以更深入地挖掘并证明即使是 static i 也从未被读取,但这是一个更难证明的事情。

关于c++ - 令人费解的编译器优化结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29691234/

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