使用 /O2 与 /Ox 编译 -- 后者更快(根据经验)
Compiling with /O2 versus /Ox -- which is faster (as a rule of thumb)?
这个问题和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
更快"的想法没有任何优点。
相关文章:
- 为什么我的程序在 O0 和 O2 的优化级别返回不同的结果
- C++ 在类中使用常量引用文本时 O2 内存泄漏
- 何时返回指针与返回对象的一般经验法则?
- 私有变量无法正常工作的C++getter方法(只有Java经验)
- O2优化水平中断程序工作
- 点云库 (PCL) - 声明点云时何时应使用 ::P tr 的经验法则?
- gcc -O2 比 gcc -O2 -g 小,后跟 strip --strip-all
- ICC 中的 -O3 会弄乱内联函数,使用 -O1 或 -O2 或相应的手动组装
- ICC 中的 -O2 搞砸了汇编程序,ICC 中的 -O1 和 GCC / Clang 中的所有优化都很好
- 非初始化警告需求-O2
- 本机C 库与UWP的建议/经验
- g++:如果在 -O2 或 -O3 之前指定,-fno-omit-frame-pointer 是否有效
- 是按值抛出和按引用捕获的经验法则
- 为什么缓冲区超支警告(C4789)仅在编译器标志 /o2中发生
- -O2 优化不会在读取大文件时出圈
- 并发::并行端口开销和性能命中率(经验法则)
- 使用 -O2 或 -O3 标志编译时未捕获异常
- Boost Spirit-项目使用-O1构建,但不使用-O2
- 当优化从-O2降低时,Eclipse将失去源位置
- 使用 /O2 与 /Ox 编译 -- 后者更快(根据经验)