#size #stack #heap #macro

deepsize_derive

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

3 个版本

0.1.2 2021 年 11 月 13 日
0.1.1 2019 年 7 月 13 日
0.1.0 2019 年 1 月 23 日

#144#heap

Download history 13174/week @ 2024-03-14 13500/week @ 2024-03-21 13317/week @ 2024-03-28 16545/week @ 2024-04-04 14110/week @ 2024-04-11 14394/week @ 2024-04-18 17504/week @ 2024-04-25 16603/week @ 2024-05-02 16199/week @ 2024-05-09 15110/week @ 2024-05-16 14456/week @ 2024-05-23 20344/week @ 2024-05-30 23457/week @ 2024-06-06 17392/week @ 2024-06-13 18887/week @ 2024-06-20 17774/week @ 2024-06-27

82,370 每月下载量
用于 deepsize

MIT 许可证

8KB
136

deepsize

一个 trait 和 derive 宏,用于递归地查找对象及其拥有的分配的大小。

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

所有权和引用计数

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

引用计数指针 (ArcRc) 在第一次出现时被计数,并跟踪以防止它们被多次计数。每个的 Weak 变体被视为引用,并且不计入。

功能

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