可视化为什么C++是不必要的循环使程序更快



我在一些有竞争力的编程网站上练习,比如UVa或LOj,并多次(10次或更多!)注意到在我的程序中放入了一个不必要的循环,例如,将其放在程序的开头-

for (int _delay = 0; _delay < 500000000; _delay++ );

让它比平时跑得更快,给了我更好的排名。我一次又一次地重新提交,但这种情况一直在发生。我的问题是这怎么可能?只是一个巧合(这种情况发生了很多次),还是编译后的程序出于某种原因得到了优化?

我认为大多数编译器都会忽略您提到的以下语句:

for (int _delay = 0; _delay < 500000000; _delay++ );

因为for循环除了修改局部变量之外什么也不做,该局部变量的作用域仅在for循环中。

至于上面的声明使整个程序更快。。。我不认为。。。

假设这样一个无用的循环对编译的代码有任何影响,性能差异的一个来源可能是落在不同存储桶中的分支指令,从而使CPU中的分支预测更加准确(请参阅为什么引入无用的MOV指令会加速x86_64程序集中的紧密循环?)。不过,你必须在受控的环境中运行程序才能进行适当的测试;我不会相信网上法官的测量结果。

最新更新