根据msdn,
/O2(最大化速度)
相当于
/Og/Oi/Ot/Oy/Ob2/Gs/GF/Gy
并再次根据msdn,以下pragma
#pragma optimize("[优化列表]", {on | off} )
在其“优化列表”中使用与 /O 编译器选项相同的字母。实用程序的可用字母是:
- g -启用全局优化。
- p -提高浮点一致性。
- s 或 t -指定机器代码的短或快序列。
- y -在程序堆栈上生成帧指针。
我应该使用哪些与 /O2 具有相同的含义?
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 选项(优化代码):
/Og
启用全局优化/Oi
为适当的函数调用生成内在函数。/Ot
(默认设置)告诉编译器优先考虑速度优化而不是大小优化。/Oy
禁止在调用堆栈上创建帧指针以加快函数调用。/Ob2
扩展标记为inline
或__inline
的函数以及编译器选择的任何其他函数/G 选项是:
/GF
(消除重复字符串)/Gy
(启用功能级链接)这些/G
选项并不是严格的优化,因此我们留下了/Og
and /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 文章按类别列出的编译器选项有一个编译器选项列表,其中包含有关其含义的链接。
我认为没有直接的等价物。
#pragma 优化(“gty”,关闭)
应该取消一个文件,/O2的大部分效果在项目级别,但是
#pragma optimise("gty", on)
只是说“使用编译器开关”,所以你需要 /O2 或 /Og /Ot /Oy。
我找不到 /G 部分的编译指示,他们做优化'喜欢'的事情。