/Os
, /Ot
(Favor Small Code, Favor Fast Code)
The /Os
and /Ot
compiler options specify whether to favor size (/Os
) or speed (/Ot
) when optimizing code.
Syntax
/Os
/Ot
Remarks
/Os
(Favor Small Code) minimizes the size of EXEs and DLLs by instructing the compiler to favor size over speed. The compiler can reduce many C and C++ constructs to functionally similar sequences of machine code. Occasionally these differences offer tradeoffs of size versus speed. The /Os
and /Ot
options allow you to specify a preference for one over the other:
/Ot
(Favor Fast Code) maximizes the speed of EXEs and DLLs by instructing the compiler to favor speed over size. /Ot
is the default when optimizations are enabled. The compiler can reduce many C and C++ constructs to functionally similar sequences of machine code. Occasionally, these differences offer tradeoffs of size versus speed. The /Ot
option is implied by the /O2
(Maximize speed) option. The /O2
option combines several options to produce faster code.
Note
Information that's gathered from profiling test runs overrides any optimizations that would otherwise be in effect if you specify /Ob
, /Os
, or /Ot
. For more information, see Profile-Guided Optimizations.
x86-specific example
The following example code demonstrates the difference between the /Os
(Favor small code) option and the /Ot
(Favor fast code) option:
Note
This example describes the expected behavior when using /Os
or /Ot
. However, compiler behavior from release to release may result in different optimizations for the code below.
/* 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;
}
As shown in the fragment of machine code below, when differ.c
is compiled for size (/Os
), the compiler implements the multiply expression in the return statement explicitly as a multiply to produce a short but slower sequence of code:
mov eax, DWORD PTR _x$[ebp]
imul eax, 71 ; 00000047H
Alternately, when differ.c
is compiled for speed (/Ot
), the compiler implements the multiply expression in the return statement as a series of shift and LEA
instructions to produce a fast but longer sequence of code:
mov eax, DWORD PTR _x$[ebp]
mov ecx, eax
shl eax, 3
lea eax, DWORD PTR [eax+eax*8]
sub eax, ecx
To set this compiler option in the Visual Studio development environment
Open the project's Property Pages dialog box. For details, see Set C++ compiler and build properties in Visual Studio.
Select the Configuration Properties > C/C++ > Optimization property page.
Modify the Favor Size or Speed property.
To set this compiler option programmatically
- See FavorSizeOrSpeed.
See also
/O options (Optimize code)
MSVC compiler options
MSVC compiler command-line syntax
Feedback
https://aka.ms/ContentUserFeedback.
În curând: Pe parcursul anului 2024, vom elimina treptat Probleme legate de GitHub ca mecanism de feedback pentru conținut și îl vom înlocui cu un nou sistem de feedback. Pentru mai multe informații, consultați:Trimiteți și vizualizați feedback pentru