#alloc #instrument #stats


An allocator wrapper that allows for instrumenting global allocators

9 releases

0.1.8 May 13, 2019
0.1.7 May 13, 2019
0.1.6 Aug 3, 2018

#28 in Memory management

33 downloads per month

MIT license

188 lines


An instrumenting middleware for global allocators in Rust, useful in testing for validating assumptions regarding allocation patterns, and potentially in production loads to monitor for memory leaks.


extern crate stats_alloc;

use stats_alloc::{StatsAlloc, Region, INSTRUMENTED_SYSTEM};
use std::alloc::System;

static GLOBAL: &StatsAlloc<System> = &INSTRUMENTED_SYSTEM;

fn example_using_region() {
    let reg = Region::new(&GLOBAL);
    let x: Vec<u8> = Vec::with_capacity(1_024);
    println!("Stats at 1: {:#?}", reg.change());
    // Used here to ensure that the value is not
    // dropped before we check the statistics

Custom allocators

Currenty wrapping a custom allocator requires the use of the nightly compiler and compiling with the "nightly" feature due to the use of the unstable const_fn and the fact that the internals of the instrumenting type are not public. If that's fine with you, a custom allocator can be wrapped as follows:

static GLOBAL: StatsAlloc<System> = StatsAlloc::new(MyCustomAllocator::new());

No runtime deps