インライン展開
インライン展開とは、ある特定の関数呼び出しをその関数の実際のコードで置き換えることであり、他のすべての最適化の前に実行されます。 インライン展開により、リンケージのオーバーヘッドが排除されるだけでなく、呼び出し先の関数全体が呼び出し側に公開されるため、コンパイラーはさらに効果的にコードを最適化できるようになります。
注: IPA でのインライン展開の相違については、IPA でのインライン展開を参照してください。
以下のタイプの呼び出しはインライン展開されません。
- 呼び出しのパラメーター数が、関数定義のパラメーター数に一致しない呼び出し。 この例は、variable argument 関数呼び出しです。
- 直接に再帰的な呼び出し。ルーチンがそれ自体を呼び出す場合。
- K&R スタイルの var_arg 関数。
表 1 に示されている C の CCNGOP1 および CCNGOP2 を例として考えてみましょう。 CCNGOP1 は、which_group() 関数について #pragma inline ディレクティブを指定しています。 CCNGOP1 をコンパイルするときに OPTIMIZE オプションを指定すると、コンパイラーは CCNGOP1 が CCNGOP2 と同じであると判断します。
サンプル・プログラム CCNGOP1 | サンプル・プログラム CCNGOP2 |
---|---|
|
|