/Og
(全局优化)
已弃用。 提供局部和全局优化、自动寄存器分配和循环优化。 我们建议你改用 /O1
(最小大小)或 /O2
(最大速度)。
语法
/Og
备注
/Og
已弃用。 现在,当启用任何优化时,默认情况下会启用这些优化。 有关优化的更多信息,请参阅/O1
、/O2
(最小化大小、最大化速度)或/Ox
(启用大多数速度优化)。
在 /Og
下,以下优化可用:
局部和全局公共子表达式消除
在这个优化中,一个公共子表达式的值被计算一次。 在以下示例中,如果
b
和c
的值在三个表达式之间没有变化,编译器可以将b + c
的计算分配给一个临时变量,并将该变量用于b + c
:a = b + c; d = b + c; e = b + c;
对于局部公共子表达式优化,编译器检查公共子表达式的一小段代码。 对于全局公共子表达式优化,编译器在整个函数中搜索公共子表达式。
自动注册分配
这种优化允许编译器将经常使用的变量和子表达式存储在寄存器中。 默认情况下忽略
register
关键字,这会在/std:c++17
或更高版本的情况下导致诊断。循环优化
这种优化从循环体中删除了不变的子表达式。 最佳循环仅包含在每次执行循环时值发生变化的表达式。 在下面的例子中,循环体中的表达式
x + y
没有改变:i = -100; while( i < 0 ) { i += x + y; }
优化后,计算一次
x + y
,而不是每次执行循环都计算:i = -100; t = x + y; while( i < 0 ) { i += t; }
当编译器可以假设没有别名时,循环优化会更有效,你可以使用
__restrict
、noalias
或restrict
来设置别名。注意
你可以结合使用
optimize
pragma 和g
选项,逐函数启用或禁用全局优化。
有关相关信息,请参阅 /Oi
(生成内在函数)和/Ox
(启用大多数速度优化)。
在 Visual Studio 开发环境中设置此编译器选项
打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
选择“配置属性”>“C/C++”>“命令行”属性页。
在“附加选项”框中输入编译器选项。
以编程方式设置此编译器选项
- 请参阅 AdditionalOptions。