#size #heap #stack #heap-memory #reference-counting #stack-memory

no-std deepsize

一个用于测量堆栈和堆上对象总大小的crate

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 内存管理

Download history 13188/week @ 2024-03-14 13502/week @ 2024-03-21 13284/week @ 2024-03-28 16552/week @ 2024-04-04 14131/week @ 2024-04-11 14351/week @ 2024-04-18 17516/week @ 2024-04-25 16614/week @ 2024-05-02 16221/week @ 2024-05-09 15113/week @ 2024-05-16 14451/week @ 2024-05-23 20365/week @ 2024-05-30 23478/week @ 2024-06-06 17374/week @ 2024-06-13 18888/week @ 2024-06-20 17771/week @ 2024-06-27

82,378每月下载量
用于 42 个crate (23 直接)

MIT 许可证

38KB
672

deepsize

一个特性和推导宏,用于递归查找对象的大小及其所拥有的分配的大小。

这应该在#[no_std]环境中工作,但需要alloc crate。

所有权和引用计数

DeepSizeOf计算结构中所有被认为是“所有”的内存。在&&mut引用之后的结构不会被计入结构的总大小;然而,像BoxVec这样的唯一所有者结构会被计入。

引用计数指针(Arc,和Rc)只在它们第一次出现时被计数,并跟踪以防止多次计数。每个的Weak变体像引用一样处理,并且不计入。

特性

  • std(默认启用):为仅在std中找到的类型添加了DeepSizeOf的实现,例如HashMapMutex
  • 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