/Og(全局优化)
提供局部优化和全局优化、自动寄存器分配和循环优化。 已否决。
/Og
备注
可使用下列优化:
局部和全局公共子表达式消除
在此优化中,计算一次公共子表达式的值。 在下面的示例中,如果 b 和 c 的值在三个表达式之间没有更改,则编译器可以将 b + c 的计算结果分配给一个临时变量,用此变量替代 b + c:
a = b + c; d = b + c; e = b + c;
对于局部公共子表达式优化,编译器检查公共子表达式的一小部分代码。 对于全局公共子表达式优化,编译器搜索全部函数中的公共子表达式。
自动寄存器分配
此优化允许编译器将常用变量和子表达式存储在寄存器中;忽略 register 关键字。
循环优化
此优化将不变量子表达式从循环体中移除。 最佳循环只包含其值在每次循环执行过程中都要更改的表达式。 在下面的示例中,表达式 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 设置),循环优化更有效。
备注
使用带 g 选项的 optimize 杂注,可以逐个函数地启用或禁用全局优化。
/Og 还会启用命名的返回值优化,此优化可消除基于堆栈的返回值的复制构造函数和析构函数。 有关更多信息,请参见/O1、/O2(最小化大小、最大化速度)。
若要了解相关信息,请参见 生成内部函数 (/Oi) 和 完全优化 (/Ox)。
/Og 已弃用;请使用 /O1 或 /O2。 有关详细信息,请参阅Deprecated Compiler Options。
在 Visual Studio 开发环境中设置此编译器选项
打开项目的**“属性页”**对话框。 有关详细信息,请参见如何:打开项目属性页。
单击**“C/C++”**文件夹。
单击**“命令行”**属性页。
在**“附加选项”**框中键入编译器选项。