/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++ > 優化 ] 屬性頁面。
修改 Favor Size 或 Speed 屬性。
若要以程式方式設定這個編譯器選項
- 請參閱 FavorSizeOrSpeed。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應