Notice: MinGW Build is broken and may not be fixed in a near future. See this PR in the upstream.
snmalloc-rs provides a wrapper for
microsoft/snmalloc to make it usable as a global allocator for rust.
snmalloc is a research allocator. Its key design features are:
- Memory that is freed by the same thread that allocated it does not require any synchronising operations.
- Freeing memory in a different thread to initially allocated it, does not take any locks and instead uses a novel message passing scheme to return the memory to the original allocator, where it is recycled.
- The allocator uses large ranges of pages to reduce the amount of meta-data required.
debug: Enable the
1mib: Use the
1mibchunk configuration. From
0.2.17, this is set as a default feature
16mib: Use the
cache-friendly: Make the allocator more cache friendly (setting
64in building the library).
snmallocfor the native CPU of the host machine. (this is not a default behavior since
madviseproblem of QEMU environment
stats: Enable statistics
local_dynamic_tls: Workaround cannot allocate memory in static tls block
build_cc: Use of cc crate instead of cmake (cmake still default) as builder (more platform agnostic)
usecxx20: Enable C++20 standard if available
win8compat: Improve compatibility for old Windows platforms (removing usages of
VirtualAlloc2and other new APIs)
To get the crates compiled, you need to choose either
16mib to determine the chunk configuration
snmalloc-rs add it as a dependency:
# Cargo.toml [dependencies] snmalloc-rs = "0.2"
SnMalloc as the global allocator add this to your project:
#[global_allocator] static ALLOC: snmalloc_rs::SnMalloc = snmalloc_rs::SnMalloc;
For MinGW Users
mingw version is only tested on nightly branch with MSYS environment. We are using dynamic linking method.
Hence, please make sure the following libs are in your
Notice: since version
0.2.12, we no longer require you to provide additional environment variables for
For Android Cross-Compilation
ANDROID_NDKmust be provided as an environment variable
ANDROID_PLATFORMcan be passed as an optional environment variable
ANDROID_ABIused by CMake is detected automatically
android-lldcan be used to set the linker of
android-shared-stdcan be used to set the STL library of
- Reduction of libc dependency
- upstream Windows 7 and windows 8 compatibility added
- upstream Option to use C++20 standards if available
- upstream Preparations of cherification (heavy refactors of the structure)
- upstream Cold routine annotations
- upstream Building adjustment
- option of cc crate as build feature, only c compiler needed, no cmake required
- Addition of dynamic local TLS option
- upstream Apple M1 support
- upstream Building adjust
- non-allocation tracking functions
- upstream update to use a more efficient power of 2 check
- fix msvc support w/ crt-static
for older versions, see CHANGELOG