Linuxカーネルのいくつかの部分を調べてみたところ、次のような呼び出しが見つかりました。
if (unlikely(fd < 0))
{
/* Do something */
}
また
if (likely(!err))
{
/* Do something */
}
私はそれらの定義を見つけました:
#define likely(x) __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)
それらが最適化のためのものであることは知っていますが、どのように機能しますか?そして、それらを使用することで、どのくらいのパフォーマンス/サイズの低下が期待できますか?そして、少なくともボトルネックコード(もちろんユーザースペース)では、面倒な(そしておそらく移植性を失う)価値があります。