/Og (Global Optimizations)
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at -Og (Global Optimizations).
Deprecated. Provides local and global optimizations, automatic-register allocation, and loop optimization.
Syntax
/Og
Remarks
/Og is deprecated. These optimizations are now generally enabled by default. For more information on optimizations, see /O1, /O2 (Minimize Size, Maximize Speed) or /Ox (Full Optimization).
The following optimizations are available under /Og:
Local and global common subexpression elimination
In this optimization, the value of a common subexpression is calculated once. In the following example, if the values of
b
andc
do not change between the three expressions, the compiler can assign the calculation ofb + c
to a temporary variable, and substitute the variable forb + c
:a = b + c; d = b + c; e = b + c;
For local common subexpression optimization, the compiler examines short sections of code for common subexpressions. For global common subexpression optimization, the compiler searches entire functions for common subexpressions.
Automatic register allocation
This optimization allows the compiler to store frequently used variables and subexpressions in registers; the
register
keyword is ignored.Loop optimization
This optimization removes invariant subexpressions from the body of a loop. An optimal loop contains only expressions whose values change through each execution of the loop. In the following example, the expression
x + y
does not change in the loop body:i = -100; while( i < 0 ) { i += x + y; }
After optimization,
x + y
is calculated once rather than every time the loop is executed:i = -100; t = x + y; while( i < 0 ) { i += t; }
Loop optimization is much more effective when the compiler can assume no aliasing, which you set with __restrict, noalias, or restrict.
Note
You can enable or disable global optimization on a function-by-function basis using the
optimize
pragma with theg
option.
/Og also enables the Named Return Value optimization, which eliminates the copy constructor and destructor of a stack based return value. See /O1, /O2 (Minimize Size, Maximize Speed) for more information.
For related information, see Generate Intrinsic Functions (/Oi) and Full Optimization (/Ox).
To set this compiler option in the Visual Studio development environment
Open the project's Property Pages dialog box. For details, see How to: Open Project Property Pages.
Click the C/C++ folder.
Click the Command Line property page.
Type the compiler option in the Additional Options box.
To set this compiler option programmatically
- See AdditionalOptions.
See Also
/O Options (Optimize Code)
Compiler Options
Setting Compiler Options