当前位置: 首页 > 知识库问答 >
问题:

除了调试之外,在gcc中使用-O3还有什么可能的缺点吗?[副本]

祁高格
2023-03-14

在使用 gcc 编译发布版本时,我是否应该始终指定 -O3 标志,还是还有其他可能的缺点?

共有1个答案

雍骏俊
2023-03-14

在用gcc编译发布版本时,我应该总是指定-O3标志吗?

不,或者至少可能不是。为了性能;有时-O3生成的代码比您从-O2中获得的代码慢。

引擎盖下;这实际上是一系列不同的优化,可以单独启用/禁用;其中,-O3(和-O2-Os)只是启用一组优化的方便快捷方式-O2应该表示“启用所有总是有帮助的优化”,而-O3“应该表示”启用所有经常有帮助(但可能会让事情变得更糟)的优化“。手册中详细介绍了每个-O设置启用/未启用的实际优化https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html ).

如果您不使用快捷方式并自行指定单个优化;然后(使用费力的“试错法”方法并对每种情况的结果进行基准测试)您可以找到始终有助于程序的优化集(并避免启用使程序性能更差的优化)。

一个更实际的方法是从< code>O2开始,然后确定哪些尚未被< code>-O2启用的优化也有帮助。

但是;性能并不是唯一重要的事情。节省时间;大多数人只是尝试-O2-O3,然后选择任何看起来最快的东西。部分原因是您的软件和编译器在不断变化;因此,您所做的任何“费力的基准测试”都需要定期进行。

注意:为了实际获得尽可能大的性能,可以使用不同的优化设置编译每个翻译单元(因此您可以对每个单独的源文件进行“费力的试错”);然后可以将生成的一组“以不同方式优化”的目标文件馈入链接时优化器以进行更多优化。

 类似资料:
  • 在我盲目地打开这些选项之前,我想知道我能期待什么。此外,由于-ofast打开了非标准兼容标志,我倾向于不使用它。我对-ofast很可能有“副作用”的假设是正确的吗? 在发布这个问题之前,我浏览了https://gcc.gnu.org/onlinedocs/gcc/optimize-options.html。

  • 对于任何与用R处理数据相关的东西,我最近一直认为tidyverse被推荐为几乎是必不可少的。这就提出了一个问题--如果这就是它被大肆宣传的那样,还有什么理由不使用它吗?例如,tidyverse中的框架是否有任何值得提及的限制性?

  • 我听说不应该使用gcc的-O3选项进行编译。这是真的吗?如果是这样,避免-O3的原因是什么?

  • 我对函数库和名称空间做了一些实验。我注意到您可以将名称空间中的函数声明为,尽管它不在类声明中: CPP: 我理解类成员的概念以及它们是如何非常有用的,但是在类外使用有什么特别的优点吗? 注意:我投了最后一票来关闭这个问题(不能删除,因为有答案),因为引用为dup的引用,尽管范围要广得多,但包含了对的详细讨论。但我不确定它是否准确地回答了我现在重新表述的问题。

  • 问题内容: 我要完成的工作是有一个固定宽度的第一个div和一个可变的第二个div,它将填充父div宽度的其余宽度。 在这一件事上,一切似乎都很好,也很流畅。 我想继续讲第二个示例,但是我觉得第二个示例将来会让我头疼。 您能否提供一些建议或见解? 问题答案: 使用起来非常好,只有一个缺点。 它不适用于IE7(或IE6,但谁在乎?) 如果您不需要支持IE7,请随时使用它。 IE7仍然有一些用法,但是您

  • 在这个解决方案中,我可以调用void中的变量。当我试图在void之外调用它时,数据是空的。 但我只想知道,为什么我的代码一开始就不能工作?谢谢。