想让 Rust 二进制变小,常见招数有 strip、LTO、panic = abort、opt-level = "z"。每一招到底省多少、编译时间涨多少、有没有反效果?这篇在同一个真实依赖的程序上逐项实测。
配置 大小(字节) 相对默认 编译(s) 运行(ms) release(默认) 587,312 1.00 4.3 4.7 + strip = true 447,856 0.76 4.1 4.0 + lto = "thin" 576,336 0.98 5.9 5.9 + lto = "fat" 492,240 0.84 6.5 6.7 + lto fat + codegen-units = 1 489,600 0.83 6.5 4.7 + panic = "abort" 536,320 0.91 4.4 6.8 + opt-level = "s" 611,360 1.04 3.8 4.8 + opt-level = "z" 619,840 1.06 3.7 5.7 全套:fat+cgu1+abort+z+strip 336,752 0.57 5.9 6.9
Cargo profile 的完整配置见Cargo Profile;更细的体积分析见二进制体积分析。rayon 1.x 从 crates.io 下载。