コンパイラすごい

バイナリバッチを当てるためにgnome-sessionのオブジェクトを見ていて、ちょっと感心した。
上のソースコードを見ると実効ユーザIDを取ってきて判断する部分

  if (geteuid () != 0)
    return FALSE;

は関数側(gsm_check_for_root ())にある。しかしオブジェクトコードではmainの中で判断して、実効ユーザIDが0の場合にgsm_check_for_root ()へ飛ぶようになっている。(正確にはgsm_check_for_root ()は関数ではなく、mainの中でインライン展開されている。)実際、最初にgsm_check_for_rootのソースを見たときに「あれ、サブルーチン側で判断するのは効率悪いなぁ*1」と思った。そしたら、何とコンパイラが最適化してくれている。感心してしまった。

*1:ソフトウェアの可読性という意味からすればgsm_check_for_root 側に置いた方が良いとは思うが。