3 个版本
| 0.1.2 | 2021 年 11 月 13 日 |
|---|---|
| 0.1.1 | 2019 年 7 月 13 日 |
| 0.1.0 | 2019 年 1 月 23 日 |
#144 在 #heap
82,370 每月下载量
用于 deepsize
8KB
136 行
deepsize
一个 trait 和 derive 宏,用于递归地查找对象及其拥有的分配的大小。
这应该在 #[no_std] 环境中工作,但需要 alloc crate。
所有权和引用计数
DeepSizeOf 计算了结构体中所有被认为是“拥有”的结构体的内存。在 & 和 &mut 引用之后的结构体不会被计入总大小;然而,如 Box 和 Vec 这样的唯一拥有的结构体会被计入。
引用计数指针 (Arc 和 Rc) 在第一次出现时被计数,并跟踪以防止它们被多次计数。每个的 Weak 变体被视为引用,并且不计入。
功能
std(默认启用):为仅在std中找到的类型添加DeepSizeOf的实现,例如HashMap和Mutex。derive(默认启用):为DeepSizeOf添加 derive 宏支持。
deepsize 还对这些外部 crate 提供可选支持
slotmap:(版本 0.4)slab:(版本 0.4)indexmap:(版本 1)arrayvec:(版本 0.5)smallvec:(版本 1)hashbrown:(版本 0.9)chrono:(版本 0.4)
示例代码
use std::mem::size_of;
use deepsize::DeepSizeOf;
#[derive(DeepSizeOf)]
struct Test {
a: u32,
b: Box<[u8]>,
}
fn main() {
let object = Test {
a: 15,
b: Box::new(*b"Hello, Wold!"),
};
assert_eq!(object.deep_size_of(), size_of::<Test>() + size_of::<u8>() * 12);
}
依赖关系
~1.5MB
~35K SLoC