簡體   English   中英

C / C ++最有效的if語句評估

[英]C/C++ most efficient if statement evaluation

X接近99.9%的時間是正確的,但我也需要處理Y和Z。 盡管X條件的主體為空,但我認為如果省略X條件,它應該比潛在地檢查其他兩個條件Y和Z更快。 你怎么看?

if (likely(X))
{
}
else if (unlikely(Y))
{
...
}
else if (unlikely(Z))
{
...
}

您可能想知道當使用可能性或可​​能性時會發生什么:
http://kerneltrap.org/node/4705

我會親自寫

if (unlikely(!X))
{
  if (unlikely(Y))
  {
  ...
  }
  else if (unlikely(Z))
  {
   ...
  }
}

這意味着如果x ,繼續執行,否則跳轉到if主體。

像往常一樣,在有疑問的情況下; 無論如何,如果我要閱讀該代碼,我會發現更清晰的內容,例如:

if (!likely(X))
{
    if (unlikely(Y))
    {
    ...
    }
    else if (unlikely(Z))
    {
    ...
    }
}

如果采用編譯器,則通常會傾向於第一個條件為true。

您可以使用__builtin_expect的控件進行控制(如Ugo所述)。

如果處於循環中,則應該進行測量,因為硬件也是一個考慮因素-不僅僅是源和編譯器。 您的緩存如何,分支預測如何為您工作? 輪廓。 改變。 輪廓。 比較。

您是否真的需要y和z上的可能性較小? 從您的問題聽起來,如果x不為真,則y或z必須為真,在這種情況下,那些不太可能的是不正確的,我將這樣做:

if (unlikely(!X))
{
  if (Y)
  {
  ...
  }
  else //Z must be true
  {
   ...
  }
}

(會對Ugo的回答發表評論,但我沒有足夠的聲譽來發表評論。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM