/Og(全局优化)

已弃用。 提供局部和全局优化、自动寄存器分配和循环优化。 我们建议你改用 /O1(最小大小)/O2(最大速度)

语法

/Og

备注

/Og 已弃用。 现在,当启用任何优化时,默认情况下会启用这些优化。 有关优化的更多信息,请参阅/O1/O2(最小化大小、最大化速度)/Ox(启用大多数速度优化)

/Og 下,以下优化可用:

  • 局部和全局公共子表达式消除

    在这个优化中,一个公共子表达式的值被计算一次。 在以下示例中,如果 bc 的值在三个表达式之间没有变化,编译器可以将 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;
    }
    

    当编译器可以假设没有别名时,循环优化会更有效,你可以使用 __restrictnoaliasrestrict 来设置别名。

    注意

    你可以结合使用 optimize pragma 和 g 选项,逐函数启用或禁用全局优化。

有关相关信息,请参阅 /Oi(生成内在函数)/Ox(启用大多数速度优化)

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

  1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”>“C/C++”>“命令行”属性页

  3. 在“附加选项”框中输入编译器选项。

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

另请参阅

MSVC 编译器命令行语法