[英]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.