| /// This macro overrides the C allocator (i.e., `malloc`) in final binaries by linking |
| /// jemalloc with the override feature enabled. The C allocator is used by the default |
| /// Rust allocator (`alloc::System`) on Unix targets but not on Windows targets. |
| #[cfg(feature = "jemalloc")] |
| #[macro_export] |
| macro_rules! override_c_allocator_in_binary { |
| () => { |
| // NOTE: even though Cargo passes `--extern` for this in rustc-main, the crate still has |
| // to be named for the compiler to see the `#[used]` inside it, see |
| // <https://github.com/rust-lang/rust/issues/64402>. |
| // |
| // FIXME(madsmtm): for the rustc-private tools this is loaded from the sysroot that was |
| // built with the other `rustc` crates, instead of via Cargo as you'd normally do. This is |
| // currently needed for LTO due to <https://github.com/rust-lang/cc-rs/issues/1613>. |
| extern crate tikv_jemalloc_sys as _; |
| }; |
| } |
| |
| /// This macro does nothing when no allocator features are enabled. |
| #[cfg(not(feature = "jemalloc"))] |
| #[macro_export] |
| macro_rules! override_c_allocator_in_binary { |
| () => {}; |
| } |