Art*_*wan 8 c performance loops goto
我知道,每个人都讨厌GOTO,没有人推荐它.但那不是重点.我只想知道,哪个代码最快:
该goto环
int i=3;
loop:
printf("something");
if(--i) goto loop;
Run Code Online (Sandbox Code Playgroud)该while环
int i=3;
while(i--) {
printf("something");
}
Run Code Online (Sandbox Code Playgroud)该for环
for(int i=3; i; i--) {
printf("something");
}
Run Code Online (Sandbox Code Playgroud)我唯一一次看到对 goto 的论证是在 W. Richard Stevens 的一篇文章或书籍中。他的观点是,在代码的一个非常时间关键的部分(我相信他的例子是网络堆栈),嵌套的 if/else 块和相关的错误处理代码可以使用 goto 以一种产生有价值的不同的方式重做。
就我个人而言,我不是一个足够优秀的程序员,无法与 Stevens 的工作争论,所以我不会尝试。跳转可以是性能相关的问题是有用的,但极限时就是这样是相当严格的。
写短程序,然后执行此操作:
gcc -S -O2 p1.c
gcc -S -O2 p2.c
gcc -S -O2 p3.c
Run Code Online (Sandbox Code Playgroud)
分析输出,看看是否有任何差异.一定要引入一定程度的不可预测性,以便编译器不会将程序优化为零.
编译器在优化这些微不足道的问题方面做得很好.我建议不要担心它,而是专注于让你作为程序员更有效率的东西.
速度和效率是一个值得担心的好事,但99%的时间都涉及使用适当的数据结构和算法...而不用担心a for是否比a while或a goto等更快.