snmalloc-rs
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.
Some old benchmark results are available in the snmalloc
paper.
There are three features defined in this crate:
debug
: Enable theDebug
mode insnmalloc
.1mib
: Use the1mib
chunk configuration.cache-friendly
: Make the allocator more cache friendly (settingCACHE_FRIENDLY_OFFSET
to64
in building the library).
To use snmalloc-rs
add it as a dependency:
# Cargo.toml
[]
= "0.2"
To set SnMalloc
as the global allocator add this to your project:
static ALLOC: SnMalloc = SnMalloc;
For MinGW Users
mingw
version is only tested on nighly branch. Due to the complexity of locating GNU libraries on Windows environment,
the library requests you to provide a MINGW64_BIN
environment variable during compiling. Since GCC
does not provide a option for us
to link libatomic
statically, I have to use dynamic linking. Hence, please make sure the following libs are in your PATH
:
winpthread
atomic
stdc++
gcc_s
This is the best thing I can do for current stage, if you have any better solution, please do help me to provide a better support for
MinGW
Changelog
0.2.10
- follow upstream 0.4.0
- upstream defense TLS teardown
- upstream adjust GCC warning
- upstream other release optimizations
0.2.9
- upstream fix OpenEnclave
- upstream adjust remote batch size (performance improved dramatically, see benchmark
- upstream improve slow path performance for allocation
0.2.8
- More CI (ARM64 on QEMU)
- upstream ARM(32/64) support
- upstream x86-SGX support
for older versions, see CHANGELOG