コンパイラーは、コンパイラーが指示するユーザー関数のインライン展開をサポートするオプションに加えて、インライン関数展開の条件をより正確に指示できるオプションも提供します。
コンパイラーは、中間言語ユニットの絶対値でルーチンの相対的なサイズを測定します。この値は、生成される命令の数とほぼ等しくなります。コンパイラーは、中間言語ユニットの評価を使用して、ルーチンと関数を小さな関数、中くらいの関数、大きな関数に分類します。次に、コンパイラーは、この評価を使用して関数をいつインライン展開するか決定します。インライン展開の最低条件が満たされ、他がすべて等しい場合、コンパイラーは小さな関数をインライン展開し、大きな関数はインライン展開しません。
しかし、以下のデベロッパーが指示するインライン展開のオプションを使用することで、最適化機構が小さな関数と大きな関数を区別するために使用している境界を変更することができます。これらのオプションは、IA-32、インテル(R) EM64T、およびインテル(R) Itanium(R) アーキテクチャーでサポートされています。
Windows* |
Linux* |
効果 |
---|---|---|
/Qinline-forceinline |
-inline-forceinline |
インライン展開を安全に行うことができる場合、マークされている関数をインライン展開するようにコンパイラーに指示します。通常、コンパイラーは、ソースコード中のキーワード (__forceinline など) に基づいて、インライン展開用にマークされている関数を判断します。しかし、ソースコード中のこれらの宣言子は、インライン展開の推奨として解釈されます。このオプションは、インライン展開の推奨を命令として解釈し、インライン展開を安全に行うことができる場合、マークされている関数をインライン展開するようにコンパイラーに指示します。 詳細は、次のトピックを参照してください。
|
/Qinline-min-size |
-inline-min-size |
小さなルーチンの最大サイズを再定義します。指定された値以下のサイズのルーチンはインライン展開される可能性が多くなります。 詳細は、次のトピックを参照してください。
|
/Qinline-max-size |
-inline-max-size |
大きなルーチンの最小サイズを再定義します。指定された値以上のサイズのルーチンはインライン展開される可能性が少なくなります。 詳細は、次のトピックを参照してください。
|
/Qinline-max-total-size |
-inline-max-total-size |
インライン展開される関数の展開サイズを制限します。 詳細は、次のトピックを参照してください。
|
/Qinline-max-per-routine |
-inline-max-per-routine |
各ルーチンで呼び出された関数がインライン展開できる回数を定義します。 詳細は、次のトピックを参照してください。
|
/Qinline-max-per-compile |
-inline-max-per-compile |
各コンパイル単位で呼び出された関数がインライン展開できる回数を定義します。 コンパイル単位の制限は、-ipo オプション (Linux) または /Qipo オプション (Windows) を指定しているかどうかによって異なります。IPO を有効にしている場合、コンパイルの一部であるソースファイルはすべて 1 つのコンパイル単位であると考えられます。IPO が関与しないコンパイルの場合、各ソースファイルが別のコンパイル単位であると考えられます。 詳細は、次のトピックを参照してください。
|