/LTCG (リンク時のコード生成)
/LTCG[:NOSTATUS|:STATUS|:PGINSTRUMENT|:PGOPTIMIZE|:PGUPDATE]
解説
:NOSTATUS |:STATUS (省略可能)
割合のリンクが完了し、その表示プログレス インジケーターを表示するかどうかを指定します。 既定で、このステータス情報は表示されません。:PGINSTRUMENT (省略可能)
リンカーがアプリケーションのインストルメント化されたテスト実行の準備として .pgd ファイルを出力することを指定します。 .pgd ファイルの名前または場所を指定するために /PGD オプションを使用できます。インストルメント化された実行から収集されたデータは、最適化されたイメージを作成するために使用されます。 詳細については、「ガイド付き最適化のプロファイル」を参照してください。 このオプションの省略形は /LTCG:PGI です。
:PGOPTIMIZE (省略可能)
リンカーは、最適化されたイメージを作成するには、インストルメントされたバイナリの実行後に作成されたプロファイル データを使用することを指定します。 すべての入力ファイルが /LTCG:PGIで指定されたファイルと同じである必要があります。 詳細については、「ガイド付き最適化のプロファイル」を参照してください。 このオプションの省略形は /LTCG:PGO です。:PGUPDATE (省略可能)
追加または修正を指定された内容からの入力ファイルのリストを使用すると、T: PGINSTRUMENT フェーズ。ただし、入力ファイルはガイド付き最適化のプロファイルで最適化されません。また、コードのインストルメンテーション フェーズ中に収集されたプロファイル データを無効にする変更された入力ファイルの変更部分は、ガイド付き最適化のプロファイルで最適化されません。詳細については、「ガイド付き最適化のプロファイル」を参照してください。 このオプションの省略形は /LTCG:PGU です。
/LTCG オプションは、コンパイラを呼び出して、プログラム全体の最適化を実行します。 ガイド付き最適化のプロファイルも実行できます。 詳細については、「ガイド付き最適化のプロファイル」を参照してください。
次の点を除き、/LTCG:PGOPTIMIZE にリンカー オプションを追加できません。または実行する /LTCG:PGINSTRUMENT で指定されていない /LTCG:PGUPDATE を実行する:
/LTCG:PGINSTRUMENT に指定されたリンカー オプションが /LTCG:PGOPTIMIZEに指定する必要はありません; これらは暗黙に指定されます。
以降では、リンク時コード生成を使用して /LTCG について説明します。
/GL を指定すると /LTCG も指定されます。
リンカーは、/GL または MSIL モジュールを使用してコンパイルされたモジュールに渡されたリンク時コード生成を呼び出します。リンカー入力としての .netmodule ファイルを参照してください。 リンカーに /GL または MSIL モジュールを渡すときに明示的に /LTCG を指定しない場合、リンカーはこのことを検出し、/LTCG /LTCGを使用してリンクを再起動します。 最も迅速なビルド パフォーマンスのリンカーに /GL および MSIL モジュールを渡すときに明示的に /LTCG を指定します。
/LTCG は /INCREMENTALの使用には無効です。
/Og、/O1、/O2、または /Oxを使用して /LTCG がコンパイルされるリンク モジュールに使用すると、次の最適化が行われます。:
モジュール間のインライン展開
関数を超えたレジスタ割り当て (64 ビット オペレーティング システムのみ)
カスタム呼び出し規約 (x86 のみ)
小さい TLS の変位 (x86 のみ)
スタックの二重配置 (x86 のみ)
メモリの一義化 (グローバル変数および入力パラメーターの干渉情報の改善)
注意
リンカーは、最適化の各関数のコンパイルされた判断し、リンク時に同じ最適化を適用します。
/LTCG と /Ogt の二重配置の最適化を使用します。
/LTCG と /Ogs を指定した場合、二重配置は行われません。 アプリケーション内のほとんどのサイズのためにコンパイルされるいくつかの関数が速度で (たとえば 最適化 プラグマを使用して、コンパイルした場合、コンパイラは、二重配置を必要とする関数を呼び出すとサイズに合わせて最適化された関数を二重配置します。
コンパイラが関数のすべての呼び出しサイトを識別できる場合、コンパイラは関数の明示的な呼び出し規約の修飾子を無視し、関数の呼び出し規約の最適化を試行する:
レジスタにパラメーターを渡す
配置のためにパラメーターを並べ替える
未使用のパラメーターを削除する
関数ポインターを通じて呼び出された場合、または関数が /GLを使用してコンパイルされたモジュールの外部で呼び出された場合、コンパイラは関数の呼び出し規約を最適化しません。
注意
/LTCG を使用して mainCRTStartup を再定義すると、アプリケーションはグローバル オブジェクトが初期化される前に実行されるユーザー コードに関連する予期しない動作をすることができます。この問題に対処方法は 3 種類あります。: mainCRTStartup をコンパイルしません /LTCGを使用して含む、または静的に初期化しますグローバル変数とオブジェクトを mainCRTStartup を再定義しないファイルを呼び出さないでください。
/LTCG モジュールと MSIL モジュール
/GL と /clr を使用してコンパイルしたモジュールは、リンカーへの入力として /LTCG が指定されている場合に使用できます。
/LTCG は 受け入れるネイティブ オブジェクト ファイル、混合モード (ネイティブ/マネージ /clrを使用してコンパイルする)、純粋なオブジェクト ファイル (/clr:pureを使用してコンパイルされます)、および安全なオブジェクト ファイルをできます (/clr:safeを使用してコンパイルされた)
/LTCG は Visual C++ で /clr:safe /LN と他の Visual Studio コンパイラでは /target:module を使用して作成できるセーフ .netmodules を使用できます。。Netmodules は**/clr** を使用して生成されるまたは /clr:pure は /LTCGで使用できません。
/LTCG:PGI は /GL と /clrを使用してコンパイルされたネイティブ モジュールまたは純粋なモジュールを使用できません。/clr:pureを使用して生成)
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 「プロジェクトのプロパティの操作」を参照してください。
[構成プロパティ] フォルダーを選択します。
[全般] プロパティ ページをクリックします。
[プログラム全体の最適化] プロパティを変更します。
、メニュー バーのビルド、[ガイド付き最適化のプロファイル] を [ビルド] をクリックします、またはプロジェクトのショートカット メニューのガイド付き最適化のプロファイル オプションの 1 つがをクリックすると、/LTCG 適用できます。
このコンパイラ オプションをコードから設定するには
- 「LinkTimeCodeGeneration」を参照してください。