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ではこのマクロで展開結果は変わりませんでした。

最終更新 2010/03/04 16:44:12 - north
(2010/01/10 05:13:20 作成)


検索

アクセス数
3690432
最近のコメント
コアダンプファイル - sakaia
list_head構造体 - yocto_no_yomikata
勧告ロックと強制ロック - wataash
LKMからのファイル出力 - 重松 宏昌
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
Adsense
広告情報が設定されていません。