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

dyn_size_of

此库用于报告变量消耗的内存量,包括堆上分配的内存

8 个版本

0.4.2 2024年2月24日
0.4.1 2023年10月26日
0.4.0 2022年12月5日
0.3.0 2022年12月5日
0.1.1 2022年2月25日

#89内存管理

Download history 4872/week @ 2024-04-22 4218/week @ 2024-04-29 3826/week @ 2024-05-06 4029/week @ 2024-05-13 3779/week @ 2024-05-20 3496/week @ 2024-05-27 4232/week @ 2024-06-03 4324/week @ 2024-06-10 4312/week @ 2024-06-17 5758/week @ 2024-06-24 4614/week @ 2024-07-01 6537/week @ 2024-07-08 7323/week @ 2024-07-15 6816/week @ 2024-07-22 6600/week @ 2024-07-29 6667/week @ 2024-08-05

27,796 每月下载量
17 个 Crates 中使用 (10 直接)

MIT/Apache

11KB
182

dyn_size_of 是 Piotr Beling 编写的 Rust 库,用于报告变量消耗的内存量,包括堆上分配的内存。

示例

简单使用

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));

为自定义类型实现 GetSize

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));

依赖项

~14KB