如果语句评估,C/C++最有效

chr*_*irk 8 c c++ gcc if-statement branch-prediction

X几乎99.9%的时间都是真的,但我也需要处理Y和Z. 虽然X条件的主体是空的,但我认为如果省略X条件,它应该比检查2个其他条件Y和Z更快.你怎么看?

if (likely(X))
{
}
else if (unlikely(Y))
{
...
}
else if (unlikely(Z))
{
...
}
Run Code Online (Sandbox Code Playgroud)

log*_*og0 11

您可能想知道在使用可能或不太可能时会发生什么:http:
//kerneltrap.org/node/4705

我个人会写

if (unlikely(!X))
{
  if (unlikely(Y))
  {
  ...
  }
  else if (unlikely(Z))
  {
   ...
  }
}
Run Code Online (Sandbox Code Playgroud)

这意味着,如果x继续执行,否则跳转到body.


Mat*_*lia 8

像往常一样,当有疑问时; 无论如何,如果我阅读那段代码,我会发现更清楚的东西:

if (!likely(X))
{
    if (unlikely(Y))
    {
    ...
    }
    else if (unlikely(Z))
    {
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @MatteoItalia:`可能'和'不太可能'是由GCC提供的宏,它包含编译器特定的内置函数***********************(我认为gcc是`__builtin_expect`) (2认同)