Expand description
A drop-in global allocator wrapper around the TCMalloc allocator. TCMalloc is a general-purpose, performance-oriented allocator built by Google.
§Usage
ⓘ
use tcmalloc_better::TCMalloc;
#[global_allocator]
static GLOBAL: TCMalloc = TCMalloc;
fn main() {
TCMalloc::process_background_actions_thread();
// Rest of main
}
§Caveats
This library is intended for use on Linux (x86_64, aarch64, powerpc64le). For applications requiring support on a broader range of platforms, consider using malloc-best-effort, which automatically selects the best allocator based on the target platform.
§Feature flags
std
(enabled by default) — enable stdextension
(enabled by default) — TCMalloc extension APInuma_aware
— Enable NUMA-aware allocation. Need to useTCMALLOC_NUMA_AWARE
environment variable at runtime. See TCMalloc commentsdeprecated_perthread
— Use deprecated per-thread caching. Newer systems with Linux kernel version >= 4.18 should not use this.legacy_locking
— Use legacy locking for systems with disabled HugeTLB See TCMalloc docsrealloc
— Use TCMalloc’s realloc instead of defaultGlobalAlloc::realloc
. Caveats: All memory deallocations will use the slowerTCMallocInternalDeleteAligned
(which accesses slow page map). Enable this feature only if you frequently use shrink operations on collections (which frees not more than 50% of collection capacity), and only after performance measurement or benchmarking.
§Logical Page Sizes (These features are mutually exclusive).
Larger page size leads to greater performance in expense to increased fragmentation. See TCMalloc tuning guide:
8k_pages
(enabled by default) — 8k pages32k_pages
— Large pages256k_pages
— 256k pagessmall_but_slow
— 4k pages, option for memory constrained systems
Structs§
- TCMalloc
- A memory allocator that can be registered as the standard library’s default
through the
#[global_allocator]
attribute.