likelyとunlikely
Rev.2を表示中。最新版はこちら。
カーネルソースを見るとlikelyとunlikelyが条件文でやたら使われている。include/linux/compiler.hで下記のように定義されている。#define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0)
で__builtin_expectはgccの機能で、コンパイラに分岐予測のヒントを与えて最適なコードを生成させるものらしい。if条件が真になる可能性が高い場合likelyを、そうでない場合はunlikelyを使うとのことで、ロジックには全く関係。ソース読む場合は無視すればよさそうです。
if (unlikely(!area)) return NULL;であろうと
if (likely(!area)) return NULL;であろうと
if (!area) return NULL;これでいいわけですね。
p/s
IA32ではこのマクロで展開結果は変わりませんでした。