/Og(全局优化)
更新:2007 年 11 月
提供局部优化和全局优化、自动寄存器分配和循环优化。已否决。
/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 在 Visual C++ 2005 中已被否决;请使用 /O1 或 /O2。有关更多信息,请参见Visual C++ 2005 中不推荐使用的编译器选项。
在 Visual Studio 开发环境中设置此编译器选项
打开项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。
单击“C/C++”文件夹。
单击“命令行”属性页。
在“附加选项”框中键入编译器选项。
以编程方式设置此编译器选项
- 请参见 AdditionalOptions。