作为一个没有经验的程序员,我经常遇到这种情况,我对我正在试图优化的一个雄心勃勃、速度密集型项目感到特别好奇。对于主要的类 C 语言(C、 objecC、 C + + 、 Java、 C # 等)和它们通常的编译器,这两个函数的运行效率是否一样高?编译后的代码有什么不同吗?
void foo1(bool flag)
{
if (flag)
{
//Do stuff
return;
}
//Do different stuff
}
void foo2(bool flag)
{
if (flag)
{
//Do stuff
}
else
{
//Do different stuff
}
}
基本上,有没有一个直接的效率奖金/惩罚时,break
ing 或 return
ing 早?堆栈框架是如何涉及的?是否存在优化的特殊情况?是否有任何因素(如内联或“做事情”的大小)可以显着影响这一点?
我一直支持提高易读性,而不是进行次要的优化(我经常在 foo1中看到参数验证) ,但这种情况出现得如此频繁,以至于我想一劳永逸地把所有的担忧都放在一边。
我也知道过早优化的缺陷... 呃,那些都是痛苦的回忆。
编辑: 我接受了一个答案,但 EJP 的答案非常简洁地解释了为什么 return
的使用几乎可以忽略不计(在汇编中,return
创建了一个到函数末尾的“分支”,这非常快。这个分支改变了 PC 寄存器,也可能影响缓存和管道,这是非常微小的。)特别是对于这种情况,它实际上没有什么区别,因为 if/else
和 return
都创建到函数末尾的相同分支。