/Os、/Ot (実行可能ファイルのサイズの優先、実行速度の優先)

EXE および DLL のサイズを最小または最大にします。

/Os
/Ot

解説

/Os (実行可能ファイルのサイズの優先) は、実行速度よりもサイズを優先させて、EXE および DLL のサイズを最小化します。 C や C++ のソースの内容を機能的に同等でサイズの小さいマシン語コードに置き換えます。 ただし、実行速度を高速化した結果、ファイル サイズが大きくなる場合もあります。 /Os/Ot では、そのいずれかを優先させることができます。

/Ot (実行速度の優先) は、サイズよりも実行速度を優先して、EXE や DLL の実行速度を最高速にします。これは、既定の設定です。C や C++ のソースの内容を機能的に同等でサイズの小さいマシン語コードに置き換えます。 ただし、実行速度を高速化した結果、ファイル サイズが大きくなる場合もあります。 /Ot オプションは、/02 (実行速度) オプションによって暗黙的に指定されます。 /O2 オプションでは、複数のオプションを組み合わせて高速なコードを生成します。

/Os または /Ot を使用する場合、コードを最適化するために /Og も指定する必要があります。

注意

プロファイリングのテスト実行から収集される情報により、/Ob/Os、または /Ot を指定する場合に有効な最適化がオーバーライドされます。詳細については、「ガイド付き最適化のプロファイル」を参照してください。

x86 固有の仕様→

次のコードは、/Os (実行可能ファイルのサイズの優先) と /Ot (実行速度の優先) の各オプションの違いを示します。

注意

次に、/Os または /Ot を使用した場合に予想される動作を説明します。ただし、コンパイラの動作はリリースごとに異なるため、次のコードの最適化の結果は異なる場合があります。

/* differ.c
  This program implements a multiplication operator
  Compile with /Os to implement multiply explicitly as multiply.
  Compile with /Ot to implement as a series of shift and LEA instructions.
*/
int differ(int x)
{
    return x * 71;
}

次のマシン語コードのように、/Os (実行可能ファイルのサイズの優先) で DIFFER.c をコンパイルすると、return ステートメントの乗算式が明示的に乗算として実装され、サイズは小さいが低速のコードが生成されます。

   mov    eax, DWORD PTR _x$[ebp]
   imul   eax, 71                  ; 00000047H

これに対し、/Ot (実行速度の優先) で DIFFER.c をコンパイルすると、return ステートメントの乗算式が一連のシフト命令および LEA 命令として実装され、高速だがサイズの大きいコードが生成されます。

   mov    eax, DWORD PTR _x$[ebp]
   mov    ecx, eax
   shl    eax, 3
   lea    eax, DWORD PTR [eax+eax*8]
   sub    eax, ecx

← x86 固有の仕様

Visual Studio 開発環境でこのコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。

  2. [C/C++] フォルダーをクリックします。

  3. [最適化] プロパティ ページをクリックします。

  4. [速度またはサイズを優先] プロパティを変更します。

このコンパイラ オプションをコードから設定するには

参照

関連項目

/O オプション (コードの最適化)

コンパイラ オプション

コンパイラ オプションの設定