优化级别 '-Os' 和 '-Oz' 在 rustc 中有什么作用?



执行rustc -C help节目(除其他外(:

-C opt-level=val       -- optimize with possible levels 0-3, s, or z

我认为 0 到 3 级相当直观:级别越高,执行的优化就越积极。但是,我不知道sz选项在做什么,也找不到有关它们的 Rust 相关信息。

似乎您不是唯一一个感到困惑的人,如 Rust 问题中所述。它似乎遵循与 Clang 相同的模式:

  • Os用于在编译时优化大小。
  • Oz进一步优化尺寸。

看看 Rust 源代码中的这些和这些行,我可以说s意味着优化大小,z意味着进一步优化大小。

所有优化似乎都由LLVM代码生成引擎执行。

LLVM中的这两个序列,O和Oz,非常相似。Oz 调用 260 次传递(我使用的是 LLVM 12.0(,而 Os 调用 264 次。Oz的分析和优化序列几乎是Os的严格子序列,除了一次传递(opt-loops(,它出现在Os中的不同位置。也就是说,请注意,优化的效果仍然可以不同,因为它们使用不同的成本模型,例如,确定优化行为的常量。因此,对大小有影响的优化(如循环展开和内联(在这两个序列中的行为可能不同。

最新更新