Mac*_*tka 20
-O3 有几个缺点:
-O2or慢的代码-Os。有时它会由于循环展开而产生更长的代码,实际上由于代码的缓存性能较差,这可能会更慢。-O3。-O3标志不会改变上下文切换的成本或 I/O 的速度。我不认为像 <0.1% 的整体性能加速是值得的。请注意,如果更改优化级别,则工具链的大部分(尤其是 glibc)将无法编译。在大多数健全的发行版上,构建系统设置为忽略这些部分的 -O 首选项。
简而言之,某些基本的库和操作系统功能取决于代码实际执行它所说的,而不是在许多情况下会更快。特别是 -fgcse-after-reload(由 -O3 启用)可能会导致奇怪的问题。
小智 8
在过去的 10 年里,我一直在运行多个 Gentoo 系统,其中包含 1000 多个-O3 -march=native在全球范围内使用的软件包,但还没有遇到任何这些-O3本应存在的神秘稳定性问题。CPU 密集型应用程序(如数学/科学应用程序)的基准测试始终显示-O3可以生成更快的代码,毕竟如果不这样做,它将毫无意义。对于大多数桌面应用程序而言,CFLAGS它们并不重要,因为它们受 IO 限制,但对于受 CPU 限制的服务器端内容来说却很重要。
-O3 使用一些积极的优化,只有在关于寄存器使用、堆栈帧如何交互和函数可重入的某些假设为真时才是安全的,并且这些假设不能保证在某些代码(如内核)中是正确的,尤其是当内联汇编是使用(因为它在内核及其驱动程序模块的一些非常低级别的部分中)。