Find out what takes most of the space in your executable.
Inspired by google/bloaty.
Note: supports ELF (Linux, BSD) and Mach-O (macOS) platforms only.
bash
cargo install cargo-bloat
or
bash
cargo install cargo-bloat --features regex-filter
if you need regex filtering using the --filter
option.
Get a list of the biggest functions in the release build:
``` % cargo bloat --release -n 10 Compiling ... Analyzing target/release/cargo-bloat
File .text Size Crate Name
0.9% 7.1% 27.0KiB cargobloat cargobloat::main
0.8% 5.7% 21.4KiB cargobloat cargobloat::processcrate
0.3% 2.3% 8.6KiB [Unknown] readlineinfo
0.3% 2.1% 7.9KiB std std::sys::unix::process::processcommon::Command::captureenv
0.3% 2.1% 7.8KiB json json::parser::Parser::parse
0.2% 1.7% 6.5KiB [Unknown] elfadd
0.2% 1.7% 6.3KiB std _rdosbacktracedwarfadd
0.2% 1.3% 5.0KiB std
Get a list of the biggest dependencies in the release build: ``` % cargo bloat --release --crates Compiling ... Analyzing target/release/cargo-bloat
File .text Size Crate 8.1% 61.2% 231.5KiB std 2.5% 19.2% 72.4KiB cargobloat 1.2% 9.4% 35.5KiB [Unknown] 1.0% 7.2% 27.2KiB json 0.3% 2.2% 8.5KiB picoargs 0.1% 0.4% 1.7KiB multimap 0.0% 0.3% 1.1KiB memmap 0.0% 0.0% 175B term_size 0.0% 0.0% 45B time 13.3% 100.0% 378.0KiB .text section size, the file size is 2.8MiB
Note: numbers above are a result of guesswork. They are not 100% correct and never will be. ```
Get a list of the biggest functions in the release build filtered by the regexp:
Note: you have to build cargo-bloat
with a regex-filter
feature enabled.
``` % cargo bloat --release --filter '^__' -n 10 Compiling ... Analyzing target/release/cargo-bloat
File .text Size Crate Name 0.2% 1.7% 6.3KiB std _rdosbacktracedwarfadd 0.1% 0.5% 1.9KiB std _rdosbacktraceqsort 0.0% 0.2% 843B std _udivmodti4 0.0% 0.1% 296B std _floattidf 0.0% 0.1% 290B std _floattisf 0.0% 0.1% 284B std _rdosbacktraceinitialize 0.0% 0.1% 253B std _floatuntisf 0.0% 0.1% 253B std _floatuntidf 0.0% 0.1% 211B std _rdosbacktracegetview 0.0% 0.0% 180B std _rdosbacktracevector_grow 0.1% 0.7% 2.8KiB And 37 smaller methods. Use -n N to show more. 0.5% 3.6% 13.5KiB filtered data size, the file size is 2.8MiB ```
Flags specific for the cargo-bloat
:
--crates Per crate bloatedness
--time Per crate build time. Will run `cargo clean` first
--filter <CRATE|REGEXP> Filter functions by crate
--split-std Split the 'std' crate to original crates like core, alloc, etc.
--full-fn Print full function name with hash values
-n <NUM> Number of lines to show, 0 to show all [default: 20]
-w, --wide Do not trim long function names
cargo-bloat is licensed under the MIT.