#heap-memory #memory #memory-size #heap #complexity #data-structures

dyn_size_of

The library to report approximate amount of memory consumed by variables, including the memory allocated on heap

8 releases

0.4.2 Feb 24, 2024
0.4.1 Oct 26, 2023
0.4.0 Dec 5, 2022
0.3.0 Dec 5, 2022
0.1.1 Feb 25, 2022

#78 in Memory management

Download history 2543/week @ 2024-01-03 2719/week @ 2024-01-10 2954/week @ 2024-01-17 2994/week @ 2024-01-24 3313/week @ 2024-01-31 2766/week @ 2024-02-07 3370/week @ 2024-02-14 5244/week @ 2024-02-21 5985/week @ 2024-02-28 5509/week @ 2024-03-06 4964/week @ 2024-03-13 4515/week @ 2024-03-20 3749/week @ 2024-03-27 3611/week @ 2024-04-03 4173/week @ 2024-04-10 4026/week @ 2024-04-17

16,292 downloads per month
Used in 16 crates (10 directly)

MIT/Apache

11KB
182 lines

dyn_size_of is the Rust library by Piotr Beling to report approximate amount of memory consumed by variables, including the memory allocated on heap.

Examples

Simple usage

use dyn_size_of::GetSize;

let bs = vec![1u32, 2u32, 3u32].into_boxed_slice();
assert_eq!(bs.size_bytes_dyn(), 3*4);
assert_eq!(bs.size_bytes(), 3*4 + std::mem::size_of_val(&bs));

Implementing GetSize for a custom type

use dyn_size_of::GetSize;

struct NoHeapMem {
    a: u32,
    b: u8
}

// default implementation is fine for types that do not use heap allocations
impl GetSize for NoHeapMem {}

struct WithHeapMem {
    a: Vec<u32>,
    b: Vec<u8>,
    c: u32
}

// For types that use heap allocations:
impl GetSize for WithHeapMem {
    // size_bytes_dyn must be implemented and return amount of heap memory used
    fn size_bytes_dyn(&self) -> usize {
        self.a.size_bytes_dyn() + self.b.size_bytes_dyn()
    }
    // USES_DYN_MEM must be set to true
    const USES_DYN_MEM: bool = true;
}

let s = NoHeapMem { a: 1, b: 2 };
assert_eq!(NoHeapMem::USES_DYN_MEM, false);
assert_eq!(s.size_bytes_dyn(), 0);
assert_eq!(s.size_bytes(), std::mem::size_of_val(&s));

let d = WithHeapMem { a: vec![1, 2], b: vec![3, 4], c: 5 };
assert_eq!(WithHeapMem::USES_DYN_MEM, true);
assert_eq!(d.size_bytes_dyn(), 2*4 + 2*1);
assert_eq!(d.size_bytes(), 2*4 + 2*1 + std::mem::size_of_val(&d));

Dependencies

~10KB