C++ 在C函数末尾的循环中,中断和返回之间是否存在显著的性能差异?

C++ 在C函数末尾的循环中,中断和返回之间是否存在显著的性能差异?,c++,c,assembly,C++,C,Assembly,以以下(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 ret

以以下(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);
  }
}
//不要因为两个空格的缩进而责怪我。输入12个空格太疯狂了。
int随便什么(int*foo){
对于(intk=0;k
一位朋友告诉我,使用
break
不仅更符合逻辑(而且当有人想在函数中添加内容时,使用
return
会带来麻烦),而且还会生成更快的代码。据说处理器在这种情况下对
jmp
-ly指令的预测比
ret
指令的预测更好


当然,在第一点上我同意他的观点,但是如果确实存在一些显著的差异,为什么编译器不优化它呢?

任何编译器都能够优化跳转到跳转。然而,实际上,无论如何,在退出之前可能会有一些清理工作要做。如有疑问,请提供个人资料。我看不出这会有什么显著的不同


在风格上,尤其是在C语言中,编译器在超出范围时不会为我清理内容,我更喜欢使用单返回点,尽管我不想使用
goto
one.

如果键入2个空格是疯狂的,请使用带有自动缩进的体面文本编辑器。4个空格缩进比2个空格可读性强得多

在编写C代码时,可读性应该是一个基本值

应根据上下文选择使用
break
return
,以使代码更易于理解和理解。如果不是对别人,你将是在帮自己的忙,几年后你将阅读自己的代码,寻找一个虚假的bug并试图理解它

无论您选择哪个选项,编译器都会以自己的方式优化代码,不同的编译器、版本或配置会以不同的方式进行优化。这种选择不应该产生明显的区别,即使这种可能性不大,也不应该是持久的


重点介绍算法的选择、数据结构、内存分配策略,可能的内存布局缓存含义。。。对于速度和整体效率而言,这些比局部微优化更为重要。

如果一条离开循环的指令稍微快一点,这将永远不会有任何关系。出于性能考虑,实际退出循环的代码不算作“内部循环”。它只执行一次。查看反汇编,如果您愿意,查看调试和发布模式,然后您就会确定。我喜欢您发现键入额外空格是“疯狂的”,但在文本编辑器中键入justicationTip:格式化代码感觉很好。确保最外层有4个前导空间。粘贴它。这是一种过早优化的尝试。如果对
if
条件的函数调用已经存在,并且所有这些条件都有一个循环,那么差异不仅难以察觉,甚至无法测量。尽可能使代码更具可读性。