我对 GCC -O3 标志非常熟悉,但它与 -Os 有何不同,在哪种情况下我们应该更喜欢一个?
原文由 Saqlain 发布,翻译遵循 CC BY-SA 4.0 许可协议
我对 GCC -O3 标志非常熟悉,但它与 -Os 有何不同,在哪种情况下我们应该更喜欢一个?
原文由 Saqlain 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
GCC 文档 非常明确地描述了这些选项的作用。
-O3 尝试非常优化代码以提高性能。它包括所有优化 -O2 包括,以及更多。
另一方面,-Os 指示 GCC “优化大小”。它启用所有 不会增加可执行文件大小的-O2 优化,然后它还切换一些优化标志以进一步减小可执行文件大小。
请注意,我的描述故意含糊不清 - 阅读 GCC 文档以更深入地讨论究竟为任一优化级别启用了哪些标志。
我相信 -O* 优化级别就是——互斥的、不同的优化 _级别_。混合它们并没有真正的意义,因为两个级别将启用或忽略另一个级别有意忽略或启用的标志(分别)。如果你想混合和匹配(你可能实际上不想这样做,除非你有一个非常好的理由想要一组特定的标志),你最好阅读文档并混合和匹配每个级别的标志手动启用。
我想我还将链接来自 Gentoo Linux Wiki 的 这篇文章,它讨论了优化标志,因为它们与构建操作系统的包有关。显然,并非所有这些都适用,但它仍然包含一些有趣的信息——例如:
根据那篇文章,在大多数情况下,-O2 与 -O3 一样“好”,并且就损坏的可执行输出而言,使用起来更安全。