/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 開發環境中設定這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性。
選取 [組態屬性>C/C++>Optimization 屬性頁。
修改 Favor Size 或 Speed 屬性。
若要以程式方式設定這個編譯器選項
- 請參閱 FavorSizeOrSpeed。