Use mimalloc as default allocator (#7140)
Ares Andrew
created 2 years ago
From https://github.com/microsoft/mimalloc:
> In our benchmarks (see
[below](https://github.com/microsoft/mimalloc#performance)), mimalloc
outperforms other leading allocators (jemalloc, tcmalloc, Hoard, etc),
and often uses less memory. A nice property is that it does consistently
well over a wide range of benchmarks. There is also good huge OS page
support for larger server programs.
Release Notes:
- Changed default allocator to mimalloc.
Change summary
Cargo.lock | 20 ++++++++++++++++++++
crates/zed/Cargo.toml | 1 +
crates/zed/src/main.rs | 4 ++++
3 files changed, 25 insertions(+)
Detailed changes
@@ -4093,6 +4093,16 @@ version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+[[package]]
+name = "libmimalloc-sys"
+version = "0.1.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3979b5c37ece694f1f5e51e7ecc871fdb0f517ed04ee45f88d15d6d553cb9664"
+dependencies = [
+ "cc",
+ "libc",
+]
+
[[package]]
name = "libsqlite3-sys"
version = "0.26.0"
@@ -4422,6 +4432,15 @@ dependencies = [
"objc",
]
+[[package]]
+name = "mimalloc"
+version = "0.1.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa01922b5ea280a911e323e4d2fd24b7fe5cc4042e0d2cda3c40775cdc4bdc9c"
+dependencies = [
+ "libmimalloc-sys",
+]
+
[[package]]
name = "mime"
version = "0.3.17"
@@ -10285,6 +10304,7 @@ dependencies = [
"log",
"lsp",
"menu",
+ "mimalloc",
"node_runtime",
"notifications",
"num_cpus",
@@ -66,6 +66,7 @@ libc = "0.2"
log.workspace = true
lsp = { path = "../lsp" }
menu = { path = "../menu" }
+mimalloc = "0.1"
node_runtime = { path = "../node_runtime" }
notifications = { path = "../notifications" }
num_cpus = "1.13.0"
@@ -18,6 +18,7 @@ use language::LanguageRegistry;
use log::LevelFilter;
use assets::Assets;
+use mimalloc::MiMalloc;
use node_runtime::RealNodeRuntime;
use parking_lot::Mutex;
use release_channel::{parse_zed_link, AppCommitSha, ReleaseChannel, RELEASE_CHANNEL};
@@ -57,6 +58,9 @@ use zed::{
OpenRequest,
};
+#[global_allocator]
+static GLOBAL: MiMalloc = MiMalloc;
+
fn main() {
menu::init();
zed_actions::init();