如果我使用"-O2"标志,性能会提高,但编译时间会变长。
我该如何决定是否使用?
也许O2对于某些特定类型的代码(例如数学计算)最有影响力,我应该仅针对项目中的这些部分使用它?
编辑:我想强调一下,将-O2设置为我项目的所有组件会将总编译时间从10分钟增加到30分钟。
我该如何决定是否使用?
也许O2对于某些特定类型的代码(例如数学计算)最有影响力,我应该仅针对项目中的这些部分使用它?
编辑:我想强调一下,将-O2设置为我项目的所有组件会将总编译时间从10分钟增加到30分钟。
我建议大部分时间使用 -O2,它的好处包括:
如果发布级别的代码将启用优化,则最好在开发/测试周期中始终启用优化。
启用优化会使源代码级调试更加困难,有时在调试问题时禁用优化是有帮助的。
我从事生物信息学,因此我的建议可能有些偏见。不过,我-O3
开关总是使用(针对发布和测试构建,而不通常用于调试)。的确,它有某些缺点,即增加了编译时间并且通常会增加可执行文件的大小。
然而,第一个因素可以通过良好的构建策略和其他技巧来部分缓解,以减少整体构建时间。此外,由于大多数编译实际上是I/O限制的,所以编译时间的增加通常不会非常明显。
第二个缺点,可执行文件的大小,通常根本不重要。
永远不要。
使用 -O3 -Wall -Werror -std=[根据您的代码库应遵循的标准]
除了编程时想测试刚写的东西以外,通常情况下不要这样做。
通常我们会设置构建环境,以便我们可以构建使用 -O0 的 调试版本 和使用 -O3 的 发布版本(构建环境保留所有配置的对象和库,以便用户可以轻松地在不同配置之间切换)。在开发过程中,为了更快的构建速度(和更准确的调试信息),大多数情况下都会构建和运行调试配置,并较少地构建和测试发布配置。