什么优化级别`-Os`和`-Oz`在rustc中做什么?

时间:2017-08-10 08:31:44

标签: rust

执行rustc -C help显示(除其他外):

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

0到3的级别非常直观,我认为:级别越高,执行的优化程度越高。但是,我不知道sz选项正在做什么,我找不到与Rust相关的信息。

3 个答案:

答案 0 :(得分:17)

似乎你并不是唯一一个感到困惑的人,如in a Rust issue所述。它似乎遵循与Clang相同的模式:

  • Os用于在编译时优化大小。
  • Oz进行更多尺寸优化。

答案 1 :(得分:12)

查看Rust的源代码中的thesethese行,我可以说s表示优化大小,z表示优化大小更多。

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

答案 2 :(得分:1)

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