Crates.io | stats_alloc |
lib.rs | stats_alloc |
version | 0.1.10 |
source | src |
created_at | 2018-08-03 16:12:05.17752 |
updated_at | 2022-03-30 13:36:01.241473 |
description | An allocator wrapper that allows for instrumenting global allocators |
homepage | |
repository | https://github.com/neoeinstein/stats_alloc |
max_upload_size | |
id | 77356 |
size | 15,846 |
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;
#[global_allocator]
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
::std::mem::size_of_val(&x);
}
Currenty wrapping a custom allocator requires the use of the nightly compiler
and compiling with the "nightly" feature due to the soon to stabilize use of
the unstable const_fn_trait_bound
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:
#[global_allocator]
static GLOBAL: StatsAlloc<System> = StatsAlloc::new(MyCustomAllocator::new());