循环优化差异

loop optimization difference for

这两者在效率上有什么区别吗?第二个更优化吗?我编译了第一个代码,然后反编译了它,得到了第二个代码。

for (i = 0; i < n; ++i) {
    if (a[i] == x) {
        printf("%d", a[i]);
        return 0;
    }
}
return 1;

i = 0;
while (1) {
    if (n <= i)
        return 1;
    if (a[i] == x)
        break;
    i = i + 1;
}
printf("%d", a[i]);
return 0;

两个代码片段执行相同的操作。主要区别是第一个可读且易于理解,第二个是混淆的,需要一些思考才能确定它实际上等同于第一个,正如许多评论所证实的那样,确实非常混乱。

在这些情况下考虑优化是徒劳的,无论如何编译器都可能为两者生成等效代码。

结论很明确:

  • 始终编写简单易读的代码。
  • 低效但正确的代码总能胜过损坏的优化代码。
  • 忘掉微优化,编译器比人类更擅长它。
  • 性能更多的是算法复杂性问题,而不是代码微调。