/OPT (最適化)
LINK がビルド時に実行する最適化を制御します。
/OPT:{REF | NOREF}
/OPT:{ICF[=iterations] | NOICF}
引数
REF | NOREF
/OPT:REF を指定すると、参照されない関数とデータが削除されます。/OPT:NOREF を指定すると、参照されない関数とデータが保持されます。既定では、パッケージ化された関数で参照されないものは削除されます。 /Gy オプションを使用してコンパイルしたオブジェクト ファイルには、パッケージ化された関数 (COMDAT 形式) があります。 この最適化は、中間 COMDAT 除去と呼ばれます。 この既定の動作をオーバーライドして、参照されていない関数をそのままプログラムに残しておくには、/OPT:NOREF を指定します。 特定のシンボルが除去されないようにするには、/INCLUDE オプションを使用します。
/DEBUG オプションを指定すると、/OPT オプションの既定値が REF から NOREF に変わるため、すべての関数がイメージに保存されます。 この既定値をオーバーライドしてデバッグ ビルドを最適化するには、/OPT:REF を指定します。 /OPT:REF オプションを使うと、インクリメンタル リンクが行われなくなります。
データが COMDAT であることを明示的に示す必要があります。__declspec(selectany) で指定します。
/OPT:REF を指定すると、既定では /OPT:ICF が有効になります。 /OPT:REF だけを使用して、/OPT:ICF を使用しない場合は、次のように指定する必要があります。
link /opt:ref /opt:noicf
/OPT:ICF を指定しても、/OPT:REF オプションは有効になりません。
ICF[= iterations**] | NOICF**
/OPT:ICF[=iterations] を使用すると、同一の COMDAT が折りたたまれ (圧縮され) ます。 リンカー出力から余分な COMDAT シンボルを削除できます。 iteration には、シンボル重複を検出するための走査回数を指定します。 既定値は 2 回です。 反復回数を増やすと、前回の反復で圧縮されなかった重複が検出されることがあります。/OPT:REF を明示的に指定して ICF が既定で有効になっている場合と、/OPT:REF,ICF を明示的に指定する場合とでは、リンカーの動作が異なります。 /OPT:REF を指定した場合の既定の ICF は、読み取り専用データを圧縮しません。 これには、.rdata、.pdata、および .xdata が含まれます。 一方、/OPT:REF を指定した場合の既定の ICF では、Itanium と x64 のイメージを生成するときに圧縮される関数の数が少なくなります。これらのモジュールの関数は、.pdata や .xdata などの読み取り専用データへの依存性が高いためです。 ICF を十分に活用するには、/OPT:ICF を明示的に指定してください。
/Gy コンパイラ オプションを指定すると、関数は COMDAT 形式で配置され、const データも COMDAT 形式で配置されます。 データの折りたたみ (圧縮) の指定方法の例については、「selectany」を参照してください。
REF が有効な場合は、既定で ICF が有効になります。デバッグ ビルドでは明示的に有効にする必要があります。 REF が有効な場合に NOICF を指定できます。
注意
/OPT:ICF を指定した結果、異なる関数または読み取り専用のデータ メンバー (/Gy を指定してコンパイルされた const 変数) に同じアドレスが割り当てられることがあります。 このため、/OPT:ICF によって、その異なる関数または読み取り専用データ メンバーのアドレスに依存しているプログラムが中断される可能性があります。 詳細については、「/Gy (関数レベルのリンクの有効化)」を参照してください。
解説
通常、最適化によってイメージのサイズが小さくなり、プログラムの実行速度が向上します。ただし、その代わりにリンク時間が長くなります。
/VERBOSE オプションを使用して、/OPT:REF によって取り除かれた関数や /OPT:ICF によって折りたたまれた (圧縮された) 関数を表示できます。
Visual Studio 開発環境でこのリンカー オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、「Visual C++ プロジェクトのプロパティの設定」を参照してください。
[リンカー] フォルダーをクリックします。
[最適化] プロパティ ページをクリックします。
次のいずれかのプロパティを変更します。
[COMDAT の圧縮]
[Windows 98 の最適化]
[参照]
このリンカーをコードから設定するには
- EnableCOMDATFolding プロパティおよび OptimizeReferences プロパティを参照してください。