gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 22:11:05 31 4
gpt4 key购买 nike

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

虽然我知道有一个叫做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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com