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
15,900 downloads per month
Used in 33 crates
(via datasize)
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