Vs的性能为Vs而Vs转到

时间:2011-04-01 19:37:54

标签: c performance loops for-loop while-loop

  

可能重复:
  C/C++: is GOTO faster than WHILE and FOR?

我知道这已被问过很多次,但我从来没有得到一个满足我的谷歌搜索答案。

我在某处读到每个循环(for / while / do-while / untill)最终将在内部转换为goto语句,是真的吗?

如果没有,根据性能明智,哪个是最好的循环使用?如果有人知道,请告诉我?

4 个答案:

答案 0 :(得分:7)

正确的答案是学习足够的汇编以便读取编译器生成的代码。

然而,这些微观优化通常无关紧要(除了非常具体的区域)。

答案 1 :(得分:4)

他们说“在内部转换为goto语句”意味着机器/程序集没有循环概念,只有compare/jump to label指令等同于if/goto

您编写的任何循环结构都将缩减为此。

答案 2 :(得分:1)

对于任何体面的编译器,这根本不会有任何区别。每种类型的循环都可能产生可比较的汇编代码。

最好使用一种最自然地表达你想要达到的效果的循环;这也使得编译器可以很好地优化它。

答案 3 :(得分:1)

编译器将所有源代码转换为目标处理器的汇编语言。汇编语言水平很低,没有像forwhile这样的结构。汇编语言使用的跳转语句相当于高级语言程序中的goto

性能方面,你使用哪个循环结构并不重要。

如果要查看和比较生成的汇编代码,可以像这样调用gcc:gcc main.c -S -O2并查看生成的main.S文件,该文件现在包含程序的汇编代码。 / p>

确保包含-O2-O3优化标记,因为比较未经过优化而构建的代码没有多大意义。