如果我针对大小 (z) 而不是速度 (3) 进行优化,我会改变什么速度增益?

Fre*_*ors 1 optimization compilation llvm rust rust-cargo

我读了两个:

我不明白的是,如果我使用,我会改变哪种速度增益:

[profile.release]
opt-level = "z"
Run Code Online (Sandbox Code Playgroud)

代替:

[profile.release]
opt-level = 3
Run Code Online (Sandbox Code Playgroud)
  • 今天opt-level = 3opt-level运行速度的最佳设置(对于部分)是否正确?

  • 如果我改为使用,opt-level = "z"我会降低运行时性能,对吗?

我对构建/编译速度不感兴趣。

Mat*_* M. 7

情况很复杂。

事情的真相是编译器优化管道主要基于启发式

许多优化是肯定的(例如强度降低),但是许多重举(例如内联)是基于一组启发式的。

当然,启发式方法并非凭空而来。它们已由编译器开发人员根据被判断为具有代表性的程序样本进行了仔细调整,并根据客户报告进行了完善。

尽管如此,在一天结束时,它们仍然是启发式的,因此有些程序使用-Oz比使用更快-O3,因为使用了一组不同的启发式。