【问题标题】:In VC++ what is the #pragma equivalent of /O2 compiler option (optimize for speed)在 VC++ 中,/O2 编译器选项的#pragma 等效项是什么(优化速度)
【发布时间】:2011-04-16 09:08:52
【问题描述】:

根据msdn

/O2(最大化速度)

等价于

/Og/Oi/Ot/Oy/Ob2/Gs/GF/Gy

再根据msdn,下面的pragma

#pragma optimize("[优化列表]", {on | off})

在其“优化列表”中使用与 /O 编译器选项相同的字母。编译指示可用的字母有:

  • g - 启用全局优化。
  • p - 提高浮点一致性。
  • s 或 t - 指定短或快的机器代码序列。
  • y - 在程序堆栈上生成帧指针。

我应该使用哪些与 /O2 具有相同的含义?

【问题讨论】:

    标签: visual-c++ compiler-optimization


    【解决方案1】:

    The Microsoft Docs article /O1, /O2 (Minimize Size, Maximize Speed) 表示 Visual Studio 2017:

    /O1 和 /O2 编译器选项是设置多个 一次特定的优化选项。 /O1 选项设置 创建最小代码的单个优化选项 大多数情况。 /O2 选项设置创建 大多数情况下最快的代码。 /O2 选项是默认值 用于发布版本。此表显示了设置的特定选项 通过 /O1 和 /O2:

    Option                   Equivalent to
    /O1 (Minimize Size)     /Og /Os /Oy /Ob2 /GF /Gy
    /O2 (Maximize Speed)    /Og /Oi /Ot /Oy /Ob2 /GF /Gy
    

    From the Microsoft Docs article /O Options (Optimize Code):

    1. /Og 启用全局优化
    2. /Oi 为适当的函数调用生成内在函数。
    3. /Ot(默认设置)告诉编译器优先考虑速度优化而不是大小优化。
    4. /Oy 禁止在调用堆栈上创建帧指针,以便更快地调用函数。
    5. /Ob2 扩展标记为 inline__inline 的函数以及编译器选择的任何其他函数

    /G 选项是:

    1. /GF(消除重复字符串)
    2. /Gy(启用函数级链接)

    /G 选项并不是严格的优化,因此我们只剩下/Og/Ot,加上#pragma intrinsic(用于列表中的第2 项)、#pragma auto_inline(用于列表中的第5 项) ) 可能还有#pragma inline_depth。见Microsoft Docs article Optimization Pragmas and Keywords

    另请参见Microsoft Docs article /Ox (Enable Most Speed Optimizations),它表示/Ox 选项与/O2 选项类似,只是它不会打开/GF/Gy。也可以看看What is the difference between the /Ox and /O2 compiler options?

    The Microsoft Docs article Compiler options listed by category 有一个编译器选项列表,其中包含关于它们含义的链接。

    【讨论】:

      【解决方案2】:

      我认为没有直接的等价物。

      #pragma optimise("gty", off)

      应该为一个文件取消,/O2在项目级别的大部分效果,但是

      #pragma optimise("gty", on)

      只是说“使用编译器开关”,所以你需要 /O2 或 /Og /Ot /Oy。

      我找不到 /G 部分的编译指示,它们会做“类似”的优化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-30
        • 2011-07-01
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        • 2021-02-24
        • 2013-12-05
        • 1970-01-01
        相关资源
        最近更新 更多