diff --git a/Cargo.lock b/Cargo.lock index 2ac84473..7dfe4034 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -146,6 +146,7 @@ dependencies = [ "home", "log", "miette", + "mimalloc", "once_cell", "reqwest", "scopeguard", @@ -778,6 +779,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "libmimalloc-sys" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ca136052550448f55df7898c6dbe651c6b574fe38a0d9ea687a9f8088a2e2c" +dependencies = [ + "cc", +] + [[package]] name = "libz-ng-sys" version = "1.1.8" @@ -850,6 +860,15 @@ dependencies = [ "syn", ] +[[package]] +name = "mimalloc" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f64ad83c969af2e732e907564deb0d0ed393cec4af80776f77dd77a1a427698" +dependencies = [ + "libmimalloc-sys", +] + [[package]] name = "mime" version = "0.3.16" diff --git a/Cargo.toml b/Cargo.toml index a4fe8f59..3a063dce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,7 @@ futures-util = { version = "0.3.21", default-features = false } home = "0.5.3" log = "0.4.14" miette = { version = "5.1.0", features = ["fancy-no-backtrace"] } +mimalloc = { version = "0.1.29", default-features = false, optional = true } once_cell = "1.12.0" reqwest = { version = "0.11.11", features = ["rustls-tls", "stream"], default-features = false } scopeguard = "1.1.0" @@ -68,6 +69,10 @@ zstd = { version = "0.10.0", features = ["bindgen", "zstdmt"], default-features [target.'cfg(any(target_os = "macos", target_os = "windows"))'.dependencies] guess_host_triple = "0.1.3" +[features] +default = [] +mimalloc = ["dep:mimalloc"] + [dev-dependencies] env_logger = "0.9.0" diff --git a/src/main.rs b/src/main.rs index 506cc478..75bfc1be 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,6 +25,10 @@ use cargo_binstall::{ *, }; +#[cfg(feature = "mimalloc")] +#[global_allocator] +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; + #[derive(Debug, Parser)] #[clap(version, about = "Install a Rust binary... from binaries!")] struct Options {