コンパイラ
関数のインライン展開の利点と欠点の組み合わせとして正しいものはどれか。
- A利点はコードが小さくなること、欠点は呼び出しの手間が増えること
- B利点はコンパイルが速く終わること、欠点は実行の結果が変わってしまうこと
- C利点は呼び出しの手間が消えること、欠点はコードが大きくなること
答えと解説を見る
正解:C. 利点は呼び出しの手間が消えること、欠点はコードが大きくなること
インライン展開では呼び出しの代わりに関数の本体を埋め込むので、引数の受け渡し、分岐、戻りの手間がなくなります。さらに、呼び出し元の定数などが本体に伝わり、定数畳み込みや不要コードの削除が効くようになるのが大きな利点です。一方、呼び出すたびに本体の写しができるのでコードが大きくなり、命令キャッシュのミスが増えることもあるため、小さな関数やよく呼ばれる関数を選んで行います。正しく行えば実行結果は変わりません。
- A. コードはむしろ大きくなり、呼び出しの手間は減ります。
- B. 正しく行えば実行結果は変わりません。
- C. 正しい。呼び出しの手間が消え最適化が広がる反面、コードが大きくなります。