/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++>Optimization 屬性頁。

  3. 修改 Favor Size 或 Speed 屬性。

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

另請參閱

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