共用方式為


/Os/Ot (偏好小型程式碼、偏好快速程式碼)

和 編譯 /Os 程式選項會指定優化程式碼時,是否偏好大小 ( /Os ) 或速度 。 /Ot/Ot

語法

/Os
/Ot

備註

/Os (偏好小型程式碼)藉由指示編譯器優先于速度,將 EXE 和 DLL 的大小降到最低。 編譯器可以減少許多 C 和 C++ 建構,以在功能上類似的機器程式碼序列。 有時候,這些差異提供大小與速度的取捨。 /Os/Ot 選項可讓您指定一個與另一個的喜好設定:

/Ot (偏好快速程式碼)藉由指示編譯器優先于大小,將 EXE 和 DLL 的速度最大化。 /Ot 是啟用優化時的預設值。 編譯器可以減少許多 C 和 C++ 建構,以在功能上類似的機器程式碼序列。 有時候,這些差異提供大小與速度的取捨。 此選項 /Ot 是由 /O2 [最大化速度] 選項所隱含。 選項 /O2 結合數個選項來產生更快的程式碼。

注意

從程式碼剖析測試回合收集的資訊會覆寫當您指定 /Ob/Os/Ot 時會生效的任何優化。 如需詳細資訊,請參閱特性指引最佳化

x86 特定範例

下列範例程式碼示範 [偏好小型程式碼] 選項與 /Ot [偏好快速程式碼] 選項之間的差異 /Os

注意

此範例描述使用 /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;
}

如下列機器程式碼片段所示,當 differ.c 編譯為 size 時, /Os 編譯器會在 return 語句中明確地實作乘運算式,以產生簡短但較慢的程式碼序列:

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

或者,當 differ.c 編譯為速度時( /Ot ),編譯器會在 return 語句中實作乘運算式,做為一系列的移位和 LEA 指示,以產生快速但較長的程式碼序列:

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

在 Visual Studio 開發環境中設定這個編譯器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [ 組態屬性 > C/C++ > 優化 ] 屬性頁面。

  3. 修改 Favor Size 或 Speed 屬性。

若要以程式方式設定這個編譯器選項

另請參閱

/O 選項 (優化程式碼)
MSVC 編譯器選項
MSVC 編譯器命令列語法