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