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