![](/img/trans.png)
[英]Is There performance difference between this three function return ways (c++)
[英]Is there significant performance difference between break and return in a loop at the end of a C function?
以下面的(Obj-)C(++)代码段为例:
// don't blame me for the 2-space indents. It's insane to type 12 spaces.
int whatever(int *foo) {
for (int k = 0; k < bar; k++) { // I know it's a boring loop
do_something(k);
if (that(k))
break; // or return
do_more(k);
}
}
一位朋友告诉我,使用break
不仅更合逻辑(当有人想在之后向函数中添加内容时,使用return
会带来麻烦),而且还会产生更快的代码。 据说在这种情况下,处理器对jmp
ly指令的预测要比对ret
预测好。
或者,当然我在第一点上同意他的观点,但是如果实际上存在一些显着差异,为什么编译器不对其进行优化?
如果输入2个空格太疯狂了,请使用具有自动缩进功能的体面的文本编辑器。 4空间缩进是大于2米的空间更可读。
编写C代码时,可读性应该是基本值。
应该根据上下文选择使用break
还是return
,以使您的代码更易于理解和理解。 如果不喜欢别人,您将对自己有所帮助,几年后,您将阅读自己的代码,寻找一个虚假的bug并试图理解它。
无论您选择哪个选项,编译器都会以自己的方式优化代码,不同的编译器,版本或配置将以不同的方式进行优化。 这种选择不会产生明显的差异,即使这种可能性很小,也不会持久。
重点关注算法,数据结构,内存分配策略的选择,以及可能的内存布局缓存含义...对于速度和总体效率,这些要比本地微优化重要得多。
任何编译器都能够优化跳转之间的跳转。 但是实际上,在退出之前,可能需要进行一些清理。 如有疑问,请简介。 我看不出这有什么重大的不同。
从风格上讲,尤其是在C语言中,当编译器超出范围时,编译器不会为我清理内容,我更喜欢有一个返回点,尽管我不会走到那goto
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.