17 releases

0.2.15 Sep 11, 2023
0.2.14 Mar 8, 2023
0.2.13 Dec 27, 2022
0.2.11 Nov 4, 2022
0.2.3 Nov 18, 2020

#21 in #accurate

Download history 2610/week @ 2024-07-04 3419/week @ 2024-07-11 3536/week @ 2024-07-18 3539/week @ 2024-07-25 3247/week @ 2024-08-01 3806/week @ 2024-08-08 3472/week @ 2024-08-15 4328/week @ 2024-08-22 3242/week @ 2024-08-29 3437/week @ 2024-09-05 4205/week @ 2024-09-12 4041/week @ 2024-09-19 4654/week @ 2024-09-26 4955/week @ 2024-10-03 5885/week @ 2024-10-10 5432/week @ 2024-10-17

21,524 downloads per month
Used in 32 crates (via datasize)

MIT/Apache

21KB
414 lines

data_size::<T>(&T)

The datasize crate is used for for estimating the heap memory usage of values, e.g. the number of bytes used by a Vec outside its on-stack size determined by mem::size_of.

datasize is intended for rough benchmarks, typically to find memory hogs (it won't find memory leaks, as memory that is not reachable will not be reported). While it may not give entirely accurate readings in all situations, it will quickly identify low-hanging fruit.

Example

The DataSize trait is implemented for many primitive and std types, and can be derived for structs and others:

use datasize::DataSize;

#[derive(DataSize)]
struct Example {
    count: usize,
    my_data: Vec<MyStruct>,
    warning: Option<Box<u32>>,
    #[data_size(skip)]
    skipped: Box<char>,
}

Any instance ex of the Example can now report an estimate of its heap allocation through data_size(&ex).

Other works

Other crates suitable for this task are heapsize and malloc_size_of. Unfortunately the heapsize crate has been discontinued and the malloc_size_of crate puts some rather heavy constraints on what allocator can be used.


lib.rs:

Proc-macro DataSize derive for use with the datasize crate.

Dependencies

~1.5MB
~37K SLoC