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

问题描述 投票:3回答:2

根据msdn

/ O2(最大化速度)

相当于

/和/爱/ OT / Oy公司/ OB2 / GS / GF /戈瑞

并再次根据msdn,以下pragma

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

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

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

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

visual-c++ compiler-optimization
2个回答
3
投票

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有一个编译器选项列表,其中包含它们的含义链接。


0
投票

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

#thing升级(“hi”,no)

应取消一个文件,大多数是/ O2在项目级别的效果,但是

#thing thing(“是的”,是的)

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

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

© www.soinside.com 2019 - 2024. All rights reserved.