4个版本
0.2.0 | 2020年10月27日 |
---|---|
0.1.2 | 2019年7月13日 |
0.1.1 | 2019年1月24日 |
0.1.0 | 2019年1月23日 |
#131 in 内存管理
82,378每月下载量
用于 42 个crate (23 直接)
38KB
672 行
deepsize
一个特性和推导宏,用于递归查找对象的大小及其所拥有的分配的大小。
这应该在#[no_std]
环境中工作,但需要alloc
crate。
所有权和引用计数
DeepSizeOf
计算结构中所有被认为是“所有”的内存。在&和
&mut
引用之后的结构不会被计入结构的总大小;然而,像Box
和Vec
这样的唯一所有者结构会被计入。
引用计数指针(Arc
,和Rc
)只在它们第一次出现时被计数,并跟踪以防止多次计数。每个的Weak
变体像引用一样处理,并且不计入。
特性
std
(默认启用):为仅在std
中找到的类型添加了DeepSizeOf
的实现,例如HashMap
和Mutex
。derive
(默认启用):为DeepSizeOf
添加了对推导宏的支持。
deepsize
还支持以下外部crate的选项
slotmap
:(版本 0.4)slab
:(版本 0.4)indexmap
:(版本 1)arrayvec
:(版本 0.5)smallvec
:(版本 1)hashbrown
:(版本 0.9)chrono
:(版本 0.4)
示例代码
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);
}
依赖项
~0–1MB
~16K SLoC