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