[C++ コンパイラ|最適化]

提供: Appmethod Topics
移動先: 案内検索

[C++ コンパイラ]プロジェクト オプション への移動


[プロジェクト|オプション...|C++ コンパイラ|最適化]

このダイアログ ボックスを使用して、C++ コンパイラの最適化オプションを設定します。

オプション 説明

[ターゲット]、[適用...]、[保存...]

[ターゲット]オプション」を参照。

共通項目

[<プロジェクト名> のプロジェクト オプション]ページの共通項目」を参照。


[最適化]オプション 説明 コンパイラ サポート
bcc32 bcc64 bccosx bcciosarm bcciosarm64 bccaarm

[すべての最適化を無効にする]

最適化の設定をすべて無効にします。これには、特に必要があって設定したものや、速度やサイズとのトレードオフの一部として通常行われる設定が含まれます。このオプションは、コードの圧縮(テールのマージ)とクロスジャンプの最適化を無効にします。そのため、このオプションを使用すると、デバッガがむやみにジャンプしたり、警告なしで関数から戻ることがなくなり、コードの追跡が容易になります。デフォルト値は[true]です。

YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png

[選択した最適化を有効にする]

下位の最適化リストから選択した最適化だけを有効にします。デフォルト値は[false]です。

[デッド ストアの削除]

余分な保存領域を削除します。下向き矢印をクリックして、選択可能な値(True、False)から選択します。デフォルト値は[false]です。

[基本ブロックと関数の内部にある重複した式の削除]

ジャンプでブレークできないステートメント(基本ブロック)と関数のグループ内にある、共通のサブ式を削除するようコンパイラに指示します。このオプションは、ターゲット スコープ内で重複する式をグローバルに削除して、式を何度も計算するのではなくその式で 1 度計算した値を保存します。このオプションは、明示的に式のスタック ロケーションを作成するのではなく、式を再利用する場合に使用します。デフォルト値は[false]です。

[ループ内の誘導変数と演算強度軽減を有効化]

誘導変数を作成し演算強度の軽減を実行して、ループ速度を最適化するようコンパイラに指示します。 このオプションは、速度を優先してコンパイルするが、コードにループが含まれる場合に使用します。

オプティマイザは、帰納法を使用して、ループ内で使用されている式から新しい変数(誘導変数)を作成します。オプティマイザは、これらの新しい変数に対して行われる操作が、元の変数を使って行われる操作に比べて計算コストがかからない(演算強度が軽減される)ことを保証します。

ループ内で配列インデックス方式を使用する場合、最適化は一般的です。インデックスが指す配列内の位置を計算するには、乗算操作が必要だからです。たとえば、オプティマイザは次のコードの操作 v[i] から誘導変数を作成します。v[i] 操作に乗算が必要だからです。この最適化により、i の値を保持する必要もなくなります。

int v[10];
void f(int x, int y, int z)
{ int i;
for (i = 0; i < 10; i++)
v[i] = x * y * z;
}

誘導変数を使用する場合、コードは次のように変更されます。

int v[10];
void f(int x, int y, int z)
{ int i, *p;
for (p = v; p < &v[9]; p++)
*p = x * y * z;
}

デフォルト値は[false]です。

[Pentium 命令スケジューリングの有効化]

Pentium 命令を生成します。このオプションにより Pentium コンピュータでのアプリケーションの実行速度が速くなりますが、80386 や i486 オプションでコンパイルした場合よりプログラムのサイズが少し大きくなります。また、Pentium でコンパイルしたコードは、Pentium 以外のシステムでもその性能が維持されます。デフォルト値は[false]です。

[共通組み込み関数の展開]

関数のスコープ内に、strcpy() などの共通メモリ関数のコードを生成するようコンパイラに指示します。これにより、関数を呼び出す必要がなくなります。その結果、コードの実行速度は速くなりますが、サイズが大きくなります。このオプションを使用すると、次の関数がインライン化されます。

allocafabsmemchrmemcmpmemcpymemsetrotlrotrstpcpystrcatstrchrstrcmpstrcpystrlenstrncatstrncmpstrncpystrnsetstrrchr

pragma intrinsic を使用して、これらの関数のインライン化を制御できます。以下に例を示します。

#pragma intrinsic strcpy

と記述すると、関数内の以降の strcpy 呼び出しすべてのインライン コードが、コンパイラによって生成されます。また、

#pragma intrinsic -strcpy

と記述すると、コンパイラは strcpy をインライン化しません。このようにファイル内で pragma を使用すると、コンパイラ オプションの設定がオーバーライドされます。
デフォルト値は[false]です。

[ジャンプの最適化]

冗長なジャンプを削除し、各種のループ文と switch 文を整理することで、コード サイズを削減するようコンパイラに指示します。このオプションを設定すると、命令文が並べ替えられたり削除されるため、デバッガでのステップ実行の順序が混乱することがあります。アセンブリ レベルでデバッグを行う場合は、このオプションを無効にすることをお勧めします。デフォルト値は[false]です。

[レジスタ変数を使用]

register キーワードを使用してレジスタ変数を指定していなくても、可能であれば、レジスタ変数を自動的に割り当てるようコンパイラに指示します。デフォルト値は[false]です。

YesC++11Feature.png
YesC++11Feature.png

[できるだけ速いコードを生成する]

このオプションを設定すると、速度を優先してコードを最適化するようコンパイラに指示する、複数の最適化オプションをまとめて設定できます。このオプションと[できるだけサイズの小さいコードを生成する]は、どちらか一方が[true]になります。両者は同時に設定できません。デフォルト値は[false]です。

YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png

[できるだけサイズの小さいコードを生成する]

サイズを優先してコードを最適化するようコンパイラに指示する、複数の最適化オプションをまとめて設定します。たとえば、コンパイラが生成されたコードを検索して重複するシーケンスを探します。重複するシーケンスがあると、オプティマイザは一方のコード シーケンスをもう一方のシーケンスへのジャンプに置換し、最初のコードを削除します。switch 文では、このようなことが多く発生します。コンパイラは、可能な限り最小のコード シーケンスを選択することで、サイズを優先した最適化を行います。このオプションと[できるだけ速いコードを生成する]は、どちらか一方が[true]になります。両者は同時に設定できません。デフォルト値は[false]です。

YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png

関連項目