Luc*_*ore 5 c++ optimization performance
编辑:删除UB(好位置,我错过了),时间或多或少相同.将标记主持人以删除它.
这两个函数是相同的,除了在两个分支上都有foo
返回的事实if
,而在末尾goo
有一个单独的函数return
:
int foo()
{
static int x = 0;
if ( x )
{
x > 2 ? x = 0 : ++x;
return x-1;
}
else
{
x++;
return x-1;
}
}
int goo()
{
static int x = 0;
if ( x )
{
x > 2 ? x = 0 : ++x;
}
else
{
x++;
}
return x-1;
}
Run Code Online (Sandbox Code Playgroud)
这些数字只是因此优化不会过于激烈而且函数调用没有被优化掉.在MSVS 2010上进行了全面优化编译.
调用函数40亿次,采样10次,foo
是永远快:
foo
- 平均8830毫秒goo
- 平均8703毫秒差异很小,但它就在那里.为什么?另外,为什么编译器不能将它们优化为同一个东西?