C循环的性能:for、while和goto的比较

3

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

我知道这个问题已经被问了很多次,但是通过谷歌搜索,我从未得到一个令我满意的答案。

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

如果不是,哪种循环从性能上来说是最好的?请让我知道,如果有人知道的话?


2
真正的答案是:当然不重要,即使它很重要,每个速度差异都会被可读性和可维护性的差异所抵消。 - user395760
4个回答

7

正确的做法是学习足够的汇编语言,以便能够阅读编译器生成的代码。

然而,这些微观优化通常并不重要(除非在非常特定的领域)。


2
学习C程序如何编译成汇编是一件很棒的事情。这将极大地增加您对C程序的理解。 - Mr. Shickadance

4
他们说“内部转换为goto语句”是指机器/汇编没有循环概念,只有比较/跳转到标签的指令,这相当于 if/goto。

你写的任何循环结构都将被简化为这个形式。


1

使用任何一个好的编译器,这都不会有任何区别。每种类型的循环都可能导致相似的汇编代码。

最好使用一种最自然地表达您想要实现的目标的循环类型;这也使得编译器可以对其进行良好的优化。


1

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

就性能而言,您使用哪种循环结构并不重要。

如果您想查看并比较生成的汇编代码,可以这样调用gcc:gcc main.c -S -O2,然后查看包含程序汇编代码的生成的main.S文件。

请确保包括-O2-O3优化标志,因为比较没有打开优化的代码没有多大意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接