時々とんだ勘違いすることがあるので、忘れないようにmemoです。
Linuxのsourceを眺めてると度々、
if (likely(skb != NULL)) とか、
if (unlikely(local_softirq_pending())) のように、
わざわざif文をlikely() or unlikely()で括ってるものを見かけます。
“un”が頭についてると、ひっくり返したくなる気持ちがこみ上げてきて、
どーしても混乱しちゃうのは私だけですかねぇ?
とりあえず・・・・
likely()は、答えが真の場合に高速動作するようにコンパイルしなさい!
unlikely()は、答えが偽の場合に高速動作するようにコンパイルしなさい!
っていう意味です。
それぞれの中身は、
#define likely __builtin_expect(!!(x), 1)
#define unlikely __builtin_expect(!!(x), 0)
__builtin_expect()は、GCCに対し分岐方向のヒントを与えるものです。
第一引数が第二引数の場合は、高速動作するようにしてね!ってね。
# 通常の道をどれにするかのヒントでしょうね(突き進む方向とジャンプする方向)
実際にsourceを読む際は、一切無視して構わないってことです。
なのに、時々勘違いしてしまう。
うーむ。
新しいノートPCをGetしたことだし、Blogもボチボチ再開しよう。
そんな風に思いながら早5日。
覚えたことを忘れない為に、Blogに書いていたはずなのに、
続かなきゃ意味ないですね(汗)
調べたものや、読んだ書籍など、ネタは溜まってきてるので、
これからちょこちょこと更新するようにします。
# 読んでくれてる方宛? いや未来の自分宛
よんでるよー!
返信削除よんでるよー!2
返信削除よんでたかーw
返信削除