使用 /O2 与 /Ox 编译 -- 后者更快(根据经验)

Compiling with /O2 versus /Ox -- which is faster (as a rule of thumb)?

本文关键字:经验 O2 Ox 编译 使用      更新时间:2023-10-16

这个问题和MSDN似乎暗示/O2会更快,但如果你看看Microsoft自己的SafeInt类,你会注意到它说:

1)编译优化的代码 - /Ox是最好的,/O2也表现良好。有趣的是,/O1 (优化大小)也不起作用。

如果差异真的像上面的问题所说的那样/GF /Gy,那么/GF无关紧要(字符串池),/Gy(省略帧指针)不会真正伤害你,据我所知。

我错过了什么吗?一般来说/Ox更快吗?为什么或为什么不呢?

/Gy不是

帧指针省略,而是/Oy,至少在/Ox/O1/O2下启用。

/Gy是 COMDAT 生成(函数级链接),它倾向于减少工作集的大小,但不应真正影响代码质量。 在模板和内联代码上,例如 SafeInt 具有,可能根本没有明显的区别。

您链接的 MSDN 页面还说使用 /O2 而不是 /Ox ,所以我认为"通常/Ox更快"的想法没有任何优点。