関数のインライン展開の条件
インライン展開に必要な諸条件が満たされると、コンパイラはどのルーチンをインライン展開すればプログラムのパフォーマンスに最も寄与するかを調べて選び出します。プロファイルに基づく最適化 (-prof_use) を使用するかどうかによって、コンパイラが使用するヒューリスティックは異なります。-ip または -ipo[value] でプロファイルに基づく最適化を使用する場合、コンパイラは次のヒューリスティックを使用します:
- デフォルト・ヒューリスティックでは、プログラムに対して収集されたプロファイル情報を基に、最も頻繁に実行される呼び出しサイトに重点がおかれます。
- デフォルトでは、コンパイラは 230 以上の中間文では、関数のインライン化は行いません。この値は、オプション -Qoption,c,-ip_ninl_max_stats=new_value を使用して変更できます。 注: inline または __inline のようにユーザに宣言される関数には、より高い制限があります。
- 通常のデフォルト・ヒューリスティックは、直接再帰 (direct recursion) を検出すると停止します。
- デフォルト・ヒューリスティックを使用すると、インライン化の最低条件を満たしている非常に小さな関数は必ずインライン化します。
- Itanium® ベース・アプリケーションのデフォルト値: ip_ninl_min_stats=15。
- IA-32 アプリケーションのデフォルト値: ip_ninl_min_stats = 7。この上限は、オプション -Qoption,c,-ip_ninl_max_stats=new_value を使用して変更できます。
-ip または -ipo[value] でプロファイルに基づく最適化を使用しない場合、コンパイラは次のヒューリスティックを使用します:
- インライン展開が最終的なプログラムのサイズを増加しない場合、関数をインライン展開します。
- 関数が inline または __inline キーワード付きで宣言された場合、関数をインライン展開します。