c#函数中过早返回的效率
这是我作为一个缺乏经验的程序员经常遇到的情况,尤其是对于我的一个雄心勃勃、速度密集的项目,我正试图优化它。对于主要的C类语言(C、Objc、C++、爪哇、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
或return
提前时,是否有直接的效率奖励/惩罚?stackframe是如何涉及的?有特殊情况吗?是否有任何因素(如内联或“Do stuff”的大小)会显著影响这一点
我一直主张通过小优化来提高易读性(我在参数验证中经常看到foo1),但这种情况经常出现,所以我想一劳永逸地抛开所有担忧
我知道过早优化的陷阱。。。这些都是痛苦的回忆
编辑:我接受了一个答案,但EJP的答案非常简洁地解释了为什么return
的使用几乎可以忽略不计(在汇编中,return
会在函数末尾创建一个“分支”,速度非常快。该分支会改变PC寄存器,还可能会影响缓存和管道,这非常小。)特别是在这种情况下,它实际上没有什么区别,因为if/else
和return
都会在函数的末尾创建相同的分支
共 (0) 个答案