likes
comments
collection
share

Rust:如何使编译出来的文件最小?运行最快?或者又小又快?

作者站长头像
站长
· 阅读数 38

能找到这篇文章,说明你已经编写完了一个 Rust 项目,现在在进行编译方面的工作了,非常棒哈,先给自己鼓励一下~

然后话不多说,直接给你最想要的回答,

  • 让文件最小,适合嵌入式开发,项目不大,也不复杂,运行速度本身就很快,只是需要将文件大小缩小到极致。
  • 让文件运行最快,适合网络服务,不在乎项目大小,只想要让其获得最大的并发量
  • 均衡发展,取两者的中间值,属于什么项目都适合

只需在你的 cargo.toml 文件中添加以下信息,并运行cargo b --release

配置示例

生成更小的可执行文件

[profile.release]
opt-level = "z"       # 优化代码尺寸
lto = true            # 启用链接时优化 (Link Time Optimization)
codegen-units = 1     # 降低代码生成单元数,增加优化时间但减少二进制大小
panic = "abort"       # 使用 'abort' 而不是 'unwind' 来处理 panic
strip = "debuginfo"   # 移除调试信息

生成更快的可执行文件

[profile.release]
opt-level = 3         # 最大程度优化代码速度
lto = "fat"           # 启用最大程度的链接时优化
codegen-units = 1     # 降低代码生成单元数,增加优化时间但提升性能
panic = "abort"       # 使用 'abort' 而不是 'unwind' 来处理 panic

兼顾大小和速度

[profile.release]
opt-level = "s"       # 优化代码尺寸,兼顾速度
lto = "fat"           # 启用最大程度的链接时优化
codegen-units = 1     # 降低代码生成单元数,增加优化时间但提升性能
panic = "abort"       # 使用 'abort' 而不是 'unwind' 来处理 panic
strip = "symbols"     # 移除符号信息,保留必要的调试信息

配置什么意思呢?来看解释

1. opt-level

  • 说明:指定编译器优化的级别。

  • 取值

    • 0:不优化,编译速度最快。
    • 1:优化编译速度。
    • 2:平衡优化速度和运行时性能(默认)。
    • 3:最大优化运行时性能。
    • "s":优化代码尺寸。
    • "z":进一步优化代码尺寸,比 "s" 更激进。
  • 选择理由:为了生成更小的可执行文件,选择 "z";为了生成最快的可执行文件,选择 3

2. lto

  • 说明:启用链接时优化(Link Time Optimization)。

  • 取值

    • false:不启用 LTO(默认)。
    • true:启用 LTO。
    • "thin":启用 Thin LTO。
    • "fat":启用最大程度的 LTO。
  • 选择理由:启用 LTO 可以减少二进制文件的大小并提高运行时性能。"thin" 比较适中,而 "fat" 则是最大程度的优化,虽然会增加编译时间,但可以带来更好的性能。

3. codegen-units

  • 说明:控制代码生成单元的数量。
  • 取值:默认值通常是 16,设为 1 可以最大化优化。
  • 选择理由:减少代码生成单元的数量,可以使编译器有更多的信息来进行全局优化,从而生成更小和更快的可执行文件。设为 1 可以最大化优化,但会增加编译时间。

4. panic

  • 说明:控制 panic 时的行为。

  • 取值

    • "unwind":展开栈(默认)。
    • "abort":直接中止。
  • 选择理由:使用 "abort" 可以减少可执行文件的大小,并提高某些情况下的性能,因为不需要保留展开栈的信息。

5. strip

  • 说明:控制移除的调试信息和符号。

  • 取值

    • "none":不移除任何信息(默认)。
    • "debuginfo":移除调试信息。
    • "symbols":移除符号表,但保留必要的信息用于调试。
    • "all":移除所有可选的信息,包括调试信息和符号表。
  • 选择理由:移除不必要的调试信息和符号表可以显著减少可执行文件的大小。

怎么样,你学会了吗?Pomelo_刘金。转载请注明原文链接。感谢!

转载自:https://juejin.cn/post/7374685303883186228
评论
请登录