3

根据msdn

/O2(最大化速度)

相当于

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

并再次根据msdn,以下pragma

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

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

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

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

4

2 回答 2

3

Microsoft Docs 文章/O1、/O2(最小化大小,最大化速度)针对 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

来自 Microsoft Docs 文章/O 选项(优化代码)

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

/G 选项是:

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

这些/G选项并不是严格的优化,因此我们留下了/Ogand /Ot,加上#pragma intrinsic(对于列表中的第 2 项),#pragma auto_inline(对于列表中的第 5 项)和可能#pragma inline_depth。请参阅Microsoft Docs 文章优化编译指示和关键字

另请参阅Microsoft Docs 文章 /Ox (Enable Most Speed Optimizations),它表明该/Ox选项类似于该/O2选项,只是它既不打开/GF也不/Gy。另请参阅/Ox 和 /O2 编译器选项有什么区别?

Microsoft Docs 文章按类别列出的编译器选项有一个编译器选项列表,其中包含有关其含义的链接。

于 2010-09-23T16:40:50.380 回答
0

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

#pragma 优化(“gty”,关闭)

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

#pragma optimise("gty", on)

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

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

于 2013-10-16T05:30:40.863 回答