在VC ++中,什么是/ O2编译器选项的#pragma等价物(优化速度)

时间:2010-09-23 16:28:24

标签: visual-c++ compiler-optimization

根据msdn

  

/ O2(最大化速度)

相当于

  

/噩/ OI / OT / Oy公司/ OB2 / GS / GF /戈瑞

再次根据msdn,以下编译指示

  

#pragma optimize(“[optimization-list]”,{on | off})

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

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

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

2 个答案:

答案 0 :(得分:3)

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

  

/ O1和/ O2编译器选项是设置多个选项的快捷方式   一次具体的优化选项。 / O1选项设置   单个优化选项,用于创建最小的代码   大多数情况。 / O2选项设置创建的选项   在大多数情况下最快的代码。 / O2选项是默认选项   发布版本。此表显示了设置的特定选项   by / 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的函数以及编译器选择的任何其他函数
  6. / G选项是:

    1. /GF(消除重复字符串)
    2. /Gy(启用功能级别链接)
    3. /G选项不是严格优化的,因此我们会留下/Og/Ot,加上#pragma intrinsic(对于列表中的第2项),{{ 1}}(对于列表中的第5项),可能是#pragma auto_inline。见Microsoft Docs article Optimization Pragmas and Keywords

      另请参阅Microsoft Docs article /Ox (Enable Most Speed Optimizations),其中#pragma inline_depth选项与/Ox选项类似,但不会启用/O2/GF。另见What is the difference between the /Ox and /O2 compiler options?

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

答案 1 :(得分:0)

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

#pragma optimize(“gty”,off)

取消一个文件,/ O2在项目级别的大部分影响,但是

#pragma optimize(“gty”,on)

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

我找不到/ G部分的编译指示,他们做'优化'就像'事情。