我知道这已被问过很多次,但我从来没有得到一个满足我的谷歌搜索答案。
我在某处读到每个循环(for / while / do-while / untill)最终将在内部转换为goto语句,是真的吗?
如果没有,根据性能明智,哪个是最好的循环使用?如果有人知道,请告诉我?
答案 0 :(得分:7)
正确的答案是学习足够的汇编以便读取编译器生成的代码。
然而,这些微观优化通常无关紧要(除了非常具体的区域)。
答案 1 :(得分:4)
他们说“在内部转换为goto语句”意味着机器/程序集没有循环概念,只有compare/jump to label
指令等同于if/goto
。
您编写的任何循环结构都将缩减为此。
答案 2 :(得分:1)
对于任何体面的编译器,这根本不会有任何区别。每种类型的循环都可能产生可比较的汇编代码。
最好使用一种最自然地表达你想要达到的效果的循环;这也使得编译器可以很好地优化它。
答案 3 :(得分:1)
编译器将所有源代码转换为目标处理器的汇编语言。汇编语言水平很低,没有像for
和while
这样的结构。汇编语言使用的跳转语句相当于高级语言程序中的goto
。
性能方面,你使用哪个循环结构并不重要。
如果要查看和比较生成的汇编代码,可以像这样调用gcc:gcc main.c -S -O2
并查看生成的main.S
文件,该文件现在包含程序的汇编代码。 / p>
确保包含-O2
或-O3
优化标记,因为比较未经过优化而构建的代码没有多大意义。