swift - 用户定义的 SWIFT_WHOLE_MODULE_OPTIMIZATION 和 Swift 优化级别之间有什么区别?

标签 swift optimization compilation

我目前正在研究优化我的项目的编译时间。

虽然我知道有一个叫做whole module optimization(简称WMO)的东西,但是我不敢在Build Settings中查看它> 因为我还没有真正深入研究它。

据我了解:

WMO 应该会导致更快的代码执行,但会略微增加编译时间,因为根据此 Swift official blog on whole module optimizations,它将整个模块文件作为一个整体进行编译,而不是分别并行编译每个文件。 .

所以建议设置Swift优化级别如下:

  • 对于Debug配置,设置为None [-Onone]
  • 对于 Release 配置,设置为 Fast, Whole Module Optimization [-O -whole-module-optimization] 因为最佳编译时间并不重要偶尔发布版本。

但是,在寻找有关如何减少调试 配置的编译时间的提示时,我发现了这个用户定义 设置:

  • SWIFT_WHOLE_MODULE_OPTIMIZATION = YES 用于调试
  • SWIFT_WHOLE_MODULE_OPTIMIZATION = NO 发布

此设置将我的调试编译时间几乎减半

因为我是 Swift 编译器和用户定义设置的新手,所以我试图找到关于 SWIFT_WHOLE_MODULE_OPTIMIZATION 的官方文档,但令人困惑的是那里没有任何在线文档。

人们只是说它减少了编译时间但没有进一步的解释,或者他们与上面提到的 Swift 优化级别冲突。

据我了解,此设置设置为 YES 会增加编译时间,因为它启用了 WMO。因此,我认为我错误地理解了 WMO

问题:

  1. Swift Optimization Level 设置和 SWIFT_WHOLE_MODULE_OPTIMIZATION 之间有什么区别?

  2. 为什么 SWIFT_WHOLE_MODULE_OPTIMIZATION 减少了编译时间?

谢谢!

最佳答案

  1. 主要区别是whole-module-optimization指的是编译器如何优化模块Swift Optimization Level指的是每个文件汇编。您可以阅读有关 Swift 优化级别 的不同标志的更多信息 here .
  2. SWIFT_WHOLE_MODULE_OPTIMIZATION 缩短了编译时间,因为编译器对所有函数、方法和文件之间的关系有更全面的了解,允许它忽略未使用的函数,优化编译顺序,以及其他改进。它还专注于仅编译修改过的文件,这意味着即使激活了该标志,如果您清理项目并删除派生数据文件夹,您在第一次运行期间仍然会有更长的编译时间。

关于swift - 用户定义的 SWIFT_WHOLE_MODULE_OPTIMIZATION 和 Swift 优化级别之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46705932/

相关文章:

ios - 如何在具有单独位置 url 和资源 url 的 swift 中从服务器直播音频?

java - 如何优化此代码以仅显示圆圈数组的轮廓?

compiler-construction - GNU flex 库 libfl 提供什么?

java - 什么是合理的 OSGi 开发流程?

ios - 自定义条码扫描仪,无法传回扫描数据

swift - 使UIView的边框颜色渐变

ios - 如何在 Swift 4 中使用 Core Data 保存数据而不写入两次值?

c++ - 需要高级低级编程的书籍和网站建议

c++ - 对于具有静态存储持续时间的对象,在编译时可以应用哪些类型的构造函数作为优化?

build - Golang 构建约束随机