何时为gcc使用-O2标志?

Igo*_*Oks 10 c++ unix optimization gcc

如果我使用"-O2"标志,性能会提高,但编译时间会变长.

我该如何决定是否使用它?

也许O2在某些特定类型的代码中有很大差异(例如数学计算?),我应该只将它用于项目的那些部分?

编辑:我想强调的是,为项目的所有组件设置-O2会将总编译时间从10分钟更改为30分钟.

Lan*_*son 23

我建议大多数时候使用-O2,好处包括:

  • 通常会减少生成代码的大小(与-O3不同).
  • 更多警告(某些警告需要仅在优化期间进行分析)
  • 通常可以显着改善性能(这可能无关紧要).

如果发布级代码将启用优化,则最好在整个开发/测试周期中启用优化.

启用优化后,源级调试会更加困难,有时在调试问题时禁用优化会很有帮助.

  • 如果代码大小是最重要的优化方法,那么使用-Os是有意义的 - 通常它不是(除了小型嵌入式系统......) (3认同)

Kon*_*lph 11

我在生物信息学方面,所以我的建议可能有偏见.也就是说,我总是使用-O3交换机(用于发布和测试版本,即通常不用于调试).确实,它有一些缺点,即增加编译时间和通常可执行文件的大小.

但是,第一个因素可以通过良好的构建策略和其他减少整体构建时间的技巧来部分缓解.此外,由于大多数编译实际上是I/O绑定的,因此编译时间的增加通常不那么明显.

第二个缺点,即可执行文件的大小,通常根本不重要.


Chr*_*fer 6

决不.

使用-O3 -Wall -Werror -std = [无论你的代码库应该遵循什么]


Geo*_*lly 5

总是,除非你正在编程并且只想测试你刚写的东西.