/GL (プログラム全体の最適化)
更新 : 2007 年 11 月
プログラム全体の最適化を有効にします。
/GL[-]
解説
プログラム全体の最適化オプションを使用すると、プログラムのすべてのモジュールに関する情報を使用して最適化処理を実行できます。プログラム全体の最適化オプションを使用しない場合は、各モジュール (コンパイル単位) ベースで最適化処理を実行します。
既定では、プログラム全体の最適化オプションは無効になっているため、明示的に有効にする必要があります。ただし、/GL- を指定して明示的に無効にすることもできます。
すべてのモジュールの情報を使用すると、コンパイラでは次のことができます。
関数境界にまたがってレジスタの使用を最適化します。
グローバル データの変更の追跡ジョブを効率化し、読み込みおよび格納の回数を減らします。
ポインタの逆参照によって変更される可能性のあるアイテム セットの追跡ジョブを効率化し、読み込みおよび格納の回数を減らします。
関数定義が別のモジュールにある場合でも、モジュールの関数をインライン展開できます。
/GL を使って生成された .obj ファイルは、EDITBIN リファレンス や DUMPBIN リファレンス などのリンカ ユーティリティでは使用できません。
/GL と /c (リンクを行わないコンパイル) を使ってプログラムをコンパイルした場合は、/LTCG リンカ オプションを使用して出力ファイルを作成する必要があります。
/Z7、/Zi、/ZI (デバッグ情報の形式) は、/GL を使うことはできません。
現在のバージョンで /GL を使って生成されたファイル形式は、Visual C++ の後続のバージョンでは読み取ることができない場合があります。現在および将来においてユーザーが使用する Visual C++ のすべてのバージョン用の .lib ファイルのコピーを同梱する意思がない場合は、/GL を使って生成された .obj ファイルで構成された .lib ファイルを出荷しないでください。
/GL の .obj ファイルを生成したときと同じコンピュータで .lib ファイルをリンクする場合以外は、/GL とプリコンパイル済みヘッダー ファイルを使って生成された .obj ファイルを .lib ファイルのビルドに使用しないでください。リンク時に、.obj ファイルのプリコンパイル済みヘッダー ファイルの情報が必要になります。
プログラム全体の最適化で使用できる最適化処理と制限の詳細については、「/LTCG (リンク時のコード生成)」を参照してください。/GL は、ガイド付き最適化のプロファイルを使用できるようにもします。詳細については「/LTCG」を参照してください。ガイド付き最適化のプロファイルのコンパイル時に、ガイド付き最適化のプロファイルの関数順序を使用する場合は、/Gy (関数レベルのリンクの有効化) を使用するか、または /Gy を暗黙に指定するコンパイラ オプションを使用して、コンパイルを実行する必要があります。
Visual Studio 開発環境でこのリンカ オプションを設定するには
- 開発環境で /GL を指定する方法については、「/LTCG (リンク時のコード生成)」を参照してください。
このリンカをコードから設定するには
- WholeProgramOptimization を参照してください。