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:
Some old benchmark results are available in
the snmalloc
paper. Some recent benchmark results
are listed at
bench_suite. There are three features defined in this crate:
debug
: Enable the Debug
mode in snmalloc
.1mib
: Use the 1mib
chunk configuration. From 0.2.17
, this is set as a default feature~~ (removed since 0.3.0)16mib
: Use the 16mib
chunk configuration.~~ (removed since 0.3.0)cache-friendly
: Make the allocator more cache friendly (setting CACHE_FRIENDLY_OFFSET
to 64
in building the
library).~~ (removed since 0.3.0)native-cpu
: Optimize snmalloc
for the native CPU of the host machine. (this is not a default behavior
since 0.2.14
)qemu
: Workaround madvise
problem of QEMU environmentstats
: Enable statistics~~ (removed since 0.3.0)local_dynamic_tls
: Workaround cannot allocate memory in static tls blockbuild_cc
: Use of cc crate instead of cmake (cmake still default) as builder (more platform agnostic)usecxx20
: Enable C++20 standard if available~~ (removed since 0.3.0)usecxx17
: Use C++17 standardcheck
: Enable extra checks to improve security, see upstream security docs.
Note that the memcpy
protection is not enabled in Rust.win8compat
: Improve compatibility for old Windows platforms (removing usages of VirtualAlloc2
and other new APIs)To get the crates compiled, you need to choose either 1mib
or 16mib
to determine the chunk configuration
To use snmalloc-rs
add it as a dependency:
```toml
[dependencies] snmalloc-rs = "0.3.0" ```
To set SnMalloc
as the global allocator add this to your project:
```rust
static ALLOC: snmallocrs::SnMalloc = snmallocrs::SnMalloc; ```
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 PATH
:
winpthread
atomic
stdc++
gcc_s
Notice: since version 0.2.12
, we no longer require you to provide additional environment variables for mingw
target.
ANDROID_NDK
must be provided as an environment variableANDROID_PLATFORM
can be passed as an optional environment variableANDROID_ABI
used by CMake is detected automaticallyandroid-lld
can be used to set the linker of snmalloc
to lld
android-shared-std
can be used to set the STL library of snmalloc
to c++_shared
(it uses c++_static
by
default)~~ (libstdc++
is no longer a dependency)cache-friendly
alloc_zeroed
from snmalloc
for older versions, see CHANGELOG