循环优化差异
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;
两个代码片段执行相同的操作。主要区别是第一个可读且易于理解,第二个是混淆的,需要一些思考才能确定它实际上等同于第一个,正如许多评论所证实的那样,确实非常混乱。
在这些情况下考虑优化是徒劳的,无论如何编译器都可能为两者生成等效代码。
结论很明确:
- 始终编写简单易读的代码。
- 低效但正确的代码总能胜过损坏的优化代码。
- 忘掉微优化,编译器比人类更擅长它。
- 性能更多的是算法复杂性问题,而不是代码微调。
这两者在效率上有什么区别吗?第二个更优化吗?我编译了第一个代码,然后反编译了它,得到了第二个代码。
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;
两个代码片段执行相同的操作。主要区别是第一个可读且易于理解,第二个是混淆的,需要一些思考才能确定它实际上等同于第一个,正如许多评论所证实的那样,确实非常混乱。
在这些情况下考虑优化是徒劳的,无论如何编译器都可能为两者生成等效代码。
结论很明确:
- 始终编写简单易读的代码。
- 低效但正确的代码总能胜过损坏的优化代码。
- 忘掉微优化,编译器比人类更擅长它。
- 性能更多的是算法复杂性问题,而不是代码微调。