|
|
@ -49,4 +49,23 @@ cargo build --profile release-lto
|
|
|
|
下面我们来看看 profile 中可以进行哪些优化设置。
|
|
|
|
下面我们来看看 profile 中可以进行哪些优化设置。
|
|
|
|
|
|
|
|
|
|
|
|
#### opt-level
|
|
|
|
#### opt-level
|
|
|
|
|
|
|
|
该字段用于控制 [`-C opt-level`](https://doc.rust-lang.org/stable/rustc/codegen-options/index.html#opt-level) 标志的优化级别。更高的优化级别往往意味着运行更快的代码,但是也意味着更慢的编译速度。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
同时,更高的编译级别甚至会造成编译代码的改变和再排列,这会为 debug 带来更高的复杂度。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
`opt-level` 支持的选项包括:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- `0`: 无优化
|
|
|
|
|
|
|
|
- `1`: 基本优化
|
|
|
|
|
|
|
|
- `2`: 一些优化
|
|
|
|
|
|
|
|
- `3`: 全部优化
|
|
|
|
|
|
|
|
- "s": 优化输出的二进制文件的大小
|
|
|
|
|
|
|
|
- "z": 优化二进制文件大小,但也会关闭循环向量化
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
我们非常推荐你根据自己的需求来找到最适合的优化级别(例如,平衡运行和编译速度)。而且有一点值得注意,有的时候优化级别和性能的关系可能会出乎你的意料之外,例如 `3` 比 `2` 更慢,再比如 `"s"` 并没有让你的二进制文件变得更小。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
而且随着 `rustc` 版本的更新,你之前的配置也可能要随之变化,总之,为项目的热点路径做好基准性能测试是不错的选择,不然总不能每次都手动重写代码来测试吧 :)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果想要了解更多,可以参考 [rustc 文档](https://doc.rust-lang.org/stable/rustc/profile-guided-optimization.html),这里有更高级的优化技巧。
|
|
|
|
|
|
|
|
|
|
|
|
#### lto
|
|
|
|
#### lto
|