【发布时间】:2013-05-25 23:46:58
【问题描述】:
函数或方法如:
void DoSomething(...){
if( ... ) return;
...
}
如果满足条件,则检查是否跳过整个函数。编译器是否将检查代码移到函数/方法之外以避免无用的函数调用?
【问题讨论】:
-
可能不会,考虑到一个函数可以在一百个不同的位置调用。这些“跳过检查”必须插入到每个位置。函数调用的成本很大程度上取决于传递的参数。
-
据我所知,
if()不会被移到外面。你能解释一下你为什么对这个感兴趣吗? -
如果
if总是评估为真(以某种编译时可确定的方式),那么函数的重置可以被优化掉,但如果是这种情况,你可能会看到一个编译器警告告诉你if总是正确的 -
大多数编译器优化器会整体内联函数,而不仅仅是部分函数。
标签: c++ optimization compiler-construction