繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM