8 个版本
0.4.2 | 2024年2月24日 |
---|---|
0.4.1 | 2023年10月26日 |
0.4.0 | 2022年12月5日 |
0.3.0 |
|
0.1.1 | 2022年2月25日 |
#89 在 内存管理 中
27,796 每月下载量
在 17 个 Crates 中使用 (10 直接)
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