• Stars
    star
    378
  • Rank 113,272 (Top 3 %)
  • Language
    Rust
  • License
    Apache License 2.0
  • Created almost 9 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Rust allocator using jemalloc as a backend

jemallocator

Travis-CI Status Appveyor Status Latest Version docs

Links against jemalloc and provides a Jemalloc unit type that implements the allocator APIs and can be set as the #[global_allocator]

Overview

The jemalloc support ecosystem consists of the following crates:

  • jemalloc-sys: builds and links against jemalloc exposing raw C bindings to it.
  • jemallocator: provides the Jemalloc type which implements the GlobalAlloc and Alloc traits.
  • jemalloc-ctl: high-level wrapper over jemalloc's control and introspection APIs (the mallctl*() family of functions and the MALLCTL NAMESPACE)'

Documentation

To use jemallocator add it as a dependency:

# Cargo.toml
[dependencies]

[target.'cfg(not(target_env = "msvc"))'.dependencies]
jemallocator = "0.3.2"

To set jemallocator::Jemalloc as the global allocator add this to your project:

# main.rs
#[cfg(not(target_env = "msvc"))]
use jemallocator::Jemalloc;

#[cfg(not(target_env = "msvc"))]
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;

And that's it! Once you've defined this static then jemalloc will be used for all allocations requested by Rust code in the same program.

Platform support

The following table describes the supported platforms:

  • build: does the library compile for the target?
  • run: do jemallocator and jemalloc-sys tests pass on the target?
  • jemalloc: do jemalloc's tests pass on the target?
  • valgrind: do the tests pass under valgrind?

Tier 1 targets are tested on all Rust channels (stable, beta, and nightly). All other targets are only tested on Rust nightly.

Linux targets: build run jemalloc valgrind
aarch64-unknown-linux-gnu βœ“ βœ“ βœ— βœ—
arm-unknown-linux-gnueabi βœ“ βœ“ βœ— βœ—
armv7-unknown-linux-gnueabi βœ“ βœ“ βœ— βœ—
i586-unknown-linux-gnu βœ“ βœ“ βœ“ βœ—
i686-unknown-linux-gnu (tier 1) βœ“ βœ“ βœ“ βœ—
mips-unknown-linux-gnu βœ“ βœ“ βœ— βœ—
mipsel-unknown-linux-musl βœ“ βœ“ βœ— βœ—
mips64-unknown-linux-gnuabi64 βœ“ βœ“ βœ— βœ—
mips64el-unknown-linux-gnuabi64 βœ“ βœ“ βœ— βœ—
powerpc-unknown-linux-gnu βœ“ βœ“ βœ— βœ—
powerpc64-unknown-linux-gnu βœ“ βœ“ βœ— βœ—
powerpc64le-unknown-linux-gnu βœ“ βœ“ βœ— βœ—
x86_64-unknown-linux-gnu (tier 1) βœ“ βœ“ βœ“ βœ“
MacOSX targets: build run jemalloc valgrind
x86_64-apple-darwin (tier 1) βœ“ βœ“ βœ— βœ—
i686-apple-darwin (tier 1) βœ“ βœ“ βœ— βœ—
Windows targets: build run jemalloc valgrind
x86_64-pc-windows-msvc (tier 1) βœ— βœ— βœ— βœ—
i686-pc-windows-msvc (tier 1) βœ— βœ— βœ— βœ—
x86_64-pc-windows-gnu (tier 1) βœ“ βœ“ βœ— βœ—
i686-pc-windows-gnu (tier 1) βœ“ βœ“ βœ— βœ—
Android targets: build run jemalloc valgrind
aarch64-linux-android βœ“ βœ“ βœ— βœ—
x86_64-linux-android βœ“ βœ“ βœ“ βœ—

Features

The jemallocator crate re-exports the features of the jemalloc-sys dependency.

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in jemallocator by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

More Repositories

1

cargo-asm

cargo subcommand showing the assembly or llvm-ir generated for Rust code
Rust
1,045
star
2

static_vector

A dynamically-resizable vector with fixed capacity and embedded storage
C++
156
star
3

slice_deque

A contiguous-in-memory double-ended queue that derefs into a slice
Rust
142
star
4

ctest

Automatic testing of FFI bindings for Rust
Rust
125
star
5

scattered

C++ Scattered Containers
C++
61
star
6

mimallocator

Rust
54
star
7

bitwise

Portable high-level bitwise manipulation algorithms
Rust
46
star
8

bitintr

Portable Bitwise Manipulation Intrinsics
Rust
36
star
9

cpp_skeleton

C++ Projekt Skeleton
CMake
19
star
10

is_sorted

Is an Iterator sorted?
Rust
18
star
11

nmp

Non-blocking message passing (a C++14 MPI wrapper)
C++
18
star
12

lbm-rs

Lattice-Boltzmann Method implementation in Rust
Rust
14
star
13

ndtree

nd-tree data structures and algorithms
C++
14
star
14

sleef-sys

Rust binding for SLEEF: SIMD Library for Evaluating Elementary Functions
Rust
12
star
15

aobench

Ambient Occlusion Benchmark in Rust (multi-threaded and explicitly vectorized)
C++
9
star
16

match_cfg

Convenience macro for defining items depending on large number of #[cfg]s
Rust
8
star
17

hm3

Hierarchical Multiphysics Multiscale methods
C++
7
star
18

simple-executor

A simple async executor for learning purposes
Rust
5
star
19

arithmetic_type

Implementation of an arithmetic type in C++
C++
5
star
20

cffi-panic

Error handling in Rust->C->Rust for C APIs taking callbacks
Rust
4
star
21

glfw

GLFW C++ wrapper with SFML-like event polling.
C++
4
star
22

hom3

A laboratory for High-Order Multiphysics Multiscale Methods
C++
3
star
23

is_utf8

Functions for ASCII and UTF-8 validation for byte slices
Rust
3
star
24

ampi

Asynchronous Message Passing Interface
Rust
3
star
25

tsc

Time stamp counter based timer
Rust
2
star
26

glibm

A pure Rust math library
Rust
2
star
27

linux-rs

Raw FFI Bindings to the Linux kernel APIs
Shell
1
star
28

typed_arch

Portably-typed std::arch intrinsics
Rust
1
star
29

toys

Toy projects
C++
1
star
30

stdsimd_portable

experimenting with building portable simd intrinsics on top of stdsimd
Rust
1
star