/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;
    }
    

    当编译器不能假定任何别名时(通过 __restrictnoaliasrestrict 设置),循环优化更有效。

    说明:

    使用带 g 选项的 optimize 杂注,可以逐个函数地启用或禁用全局优化。

/Og 还会启用命名的返回值优化,此优化可消除基于堆栈的返回值的复制构造函数和析构函数。有关更多信息,请参见 /O1、/O2(最小化大小、最大化速度)

若要了解相关信息,请参见 生成内部函数 (/Oi)完全优化 (/Ox)

/Og 在 Visual C++ 2005 中已被否决;请使用 /O1/O2。有关更多信息,请参见Visual C++ 2005 中不推荐使用的编译器选项

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页

  2. 单击“C/C++”文件夹。

  3. 单击“命令行”属性页。

  4. 在“附加选项”框中键入编译器选项。

以编程方式设置此编译器选项

请参见

参考

/O 选项(优化代码)

编译器选项

设置编译器选项