的循环优化差异

时间:2019-05-03 19:56:58

标签: c optimization compilation decompiling

这两者在效率方面是否有区别?第二个更优化了吗?我先编译了第一段代码,然后反编译了第二段代码。

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;

1 个答案:

答案 0 :(得分:1)

两个代码片段执行相同的操作。主要的区别是第一个是可读且易于理解的,第二个是模糊的,需要花一些时间才能弄清楚它确实与第一个等同,确实使很多评论证实这一点令人困惑。

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

结论很明确:

  • 始终编写简单易读的代码。
  • 效率低下但正确的代码总是能击败破碎的优化代码。
  • 忘记微优化,编译器比人类要好得多。
  • 性能比代码微调更是算法复杂性的问题。
相关问题