リンカの最適化
仮想関数の除去
仮想関数除去(VFE)は、不要な仮想関数と動的ランタイム型情報を除去するリンカの最適化です。
仮想関数除去が機能するためには、仮想関数テーブルについての情報や、どの仮想関数が呼び出されるか、どのクラスの動的ランタイム型情報が必要かをすべての適切なモジュールで指定する必要があります。1つまたは複数のモジュールでこの情報が得られない場合、リンカでワーニングが生成され、仮想関数除去は実行されません。
危険
このような情報を持たないモジュールが仮想関数の呼び出しを実行せず、仮想関数テーブルを定義しないことが分かっている場合、‑‑vfe=forcedリンカオプションを使用して、仮想関数除去を有効にできます。
注意
IDEで、[プロジェクト]>[オプション]>[リンカ]>[最適化]>[C++仮想関数除去]を選択して、この最適化を有効にします。
注記
仮想関数除去は、--no_vfeリンカオプションを使用して完全に無効にすることができます。この場合、VFE情報を持たないモジュールについてワーニングは出力されません。
小さいルーチンのインライン化
小さいルーチンのインライン化は、リンカの最適化で、小さい関数の呼び出しを、関数の本体と置き換えます。これには、関数を呼び出す命令のスペースに収まる本体が必要です。
注意
IDEで、[プロジェクト]>[オプション]>[リンカ]>[最適化]>[小さいルーチンのインライン化]を選択して、この最適化を有効にします。
危険
リンカオプション‑‑inlineを使用します。
重複セクションのマージ
リンカは、同一の内容を持つ読み取り専用セクションを検出し、そのような各セクションのコピーを1つだけ保持し、すべての重複セクションへのリファレンスを保持セクションにリダイレクトします。
注意
IDEで、[プロジェクト]>[オプション]>[リンカ]>[最適化]>[重複セクションのマージ]を選択して、この最適化を有効にします。
危険
リンカオプション‑‑merge_duplicate_sectionsを使用します。
注記
これは、異なる関数または定数が同じアドレスをもつ原因になります。よって、テーブルのキーとしてアドレスを使用しているなど、アプリケーションが異なるアドレスに依存している場合は、この最適化を有効にしないでください。