2个不稳定版本

0.1.0 2024年5月14日
0.0.1 2024年4月25日

#101内存管理

MIT 协议

34KB
769

heapsz

用于计算数据结构堆使用的crate。

它很简单。只需要在HeapSize特质中实现一个方法,该方法可以通过#[derive(HeapSize)]自动生成。

它很快。它可以在O(1)时间内估算一个近似的堆大小。

用法

示例

选择性计算heap_size()

示例展开示例
#[derive(HeapSize)]
struct Foo {
    a: usize,
    b: Option<u64>,
    #[heap_size]
    c: Box<[usize; 5]>,
    #[heap_size]
    d: Vec<usize>,
}
impl HeapSize for Foo {
    fn heap_size(&self) -> usize {
        self.c.heap_size() + self.d.heap_size()
    }
}
计算所有字段的heap_size()
示例展开示例
#[derive(HeapSize)]
#[heap_size]
struct Foo {
    a: usize,
    b: Option<u64>,
    c: Box<[usize; 5]>,
    d: Vec<usize>,
}
impl HeapSize for Foo {
    fn heap_size(&self) -> usize {
        self.a.heap_size()
            + self.b.heap_size()
            + self.c.heap_size()
            + self.d.heap_size()
    }
}
跳过无关字段
示例展开示例
#[derive(HeapSize)]
#[heap_size]
struct Foo {
    a: usize,
    b: Option<u64>,
    #[heap_size(skip)]
    c: Arc<[usize; 5]>,
    d: Vec<usize>,
}
impl HeapSize for Foo {
    fn heap_size(&self) -> usize {
        self.a.heap_size()
            + self.b.heap_size()
            + self.d.heap_size()
    }
}
为第三方结构体实现HeapSize
示例展开示例
mod bytes_heap_size {
    pub heap_size(
        b: &Bytes
    ) -> usize {
        b.len()
    }
}

#[derive(HeapSize)]
#[heap_size]
struct Foo {
    a: usize,
    b: Option<u64>,
    c: Box<[usize; 5]>,
    d: Bytes,
}
impl HeapSize for Foo {
    fn heap_size(&self) -> usize {
        self.a.heap_size()
            + self.b.heap_size()
            + bytes_heap_size::heap_size(&self.d)
    }
}

#[derive(HeapSize)]

字段属性

应用于结构体或枚举变体中的一个字段。

  • #[heap_size]

    默认情况下,#[derive(HeapSize)]会生成一个空的实现,总是返回0。需要为具有堆分配的字段添加#[heap_size]

    这是因为1)大多数结构体根本不包含堆分配,2)它们通常不实现HeapSize特质。

  • #[heap_size(skip)]

    跳过此字段:不计算其堆大小。

    要求结构体必须有一个容器属性 #[heap_size]

  • #[heap_size(使用= "模块")]

    #[derive(HeapSize)] 将使用 $module::heap_size 作为获取此字段堆大小的函数。

容器属性

应用于结构体或枚举声明。

  • #[heap_size] 默认情况下,#[derive(HeapSize)] 生成一个空的实现,总是返回 0。通过添加 #[heap_size],它会将结构体或枚举中所有字段的 heap_size() 相加。

变体属性

应用于枚举的变体。

  • #[heap_size]

    默认情况下,#[derive(HeapSize)] 生成一个空的实现,总是返回 0。通过添加 #[heap_size],它会将变体中字段的 heap_size() 相加。

  • #[heap_size(skip)]

    跳过此变体:不计算其堆大小。

    要求枚举有一个 #[heap_size] 容器属性。

许可证

本项目根据 MIT 许可证 许可。

依赖关系

~0–375KB