#memory #utility #usage

no-std memusage

一个用于跟踪结构体内存使用的简单特质工具

2个不稳定版本

0.2.0 2023年10月10日
0.1.0 2022年2月20日

#212内存管理

Download history 135/week @ 2024-04-10 71/week @ 2024-04-17 77/week @ 2024-04-24 62/week @ 2024-05-01 58/week @ 2024-05-08 99/week @ 2024-05-15 125/week @ 2024-05-22 91/week @ 2024-05-29 82/week @ 2024-06-05 106/week @ 2024-06-12 83/week @ 2024-06-19 107/week @ 2024-06-26 110/week @ 2024-07-03 93/week @ 2024-07-10 123/week @ 2024-07-17 59/week @ 2024-07-24

413 每月下载量
用于 bit-matrix

自定义许可

18KB
366

memusage

memusage 是一个包含(一些)电池的记忆使用报告。这个crate包括一个简单的特质 MemoryReport,使您能够轻松跟踪项目中的内存使用。

使用方法

Cargo.toml

[dependencies]
memusage = "0.1.0"

MemoryReport 特质包含三个关联方法: directindirectchildren

direct 内存报告

函数签名:fn direct() -> usize

这个内存报告的灵感和实现目的是与 core::mem::size_of::<Self>() 等价。此方法主要用于使用方便。

indirect 内存报告

函数签名:fn indirect(&self) -> usize

此函数用于报告结构体分配的堆内存(以及数组的情况下的栈内存)量。此方法在特质中有一个关联的常量(ALLOC: bool),用于指示实现特质的对象拥有除结构体本身的内存之外的其他内存。

例如,一个 Vec<T: MemoryReport> 将会报告它所保留的全部内存容量: self.capacity() * T::direct()

代码示例

let vec_of_usizes: Vec<usize> = vec![1, 2, 3, 4];

println!("{}", vec_of_usizes.indirect());

children 内存报告

函数签名: fn children(&self) -> usize

此函数用于报告结构体的子结构的堆分配内存量。该方法在特性和相关常量(CHILD: bool)中有一个关联的常量,用于指示实现该特性的对象可能有子对象分配内存。

例如,一个 Vec<T: MemoryReport>&[T] 将会报告它们所包含的元素分配的内存。一个 Vec<usize> 将报告 0,因为 usize 不分配内存,但一个 &[Vec<usize>] 将报告一些内存,因为 Vec<usize> 会分配内存。

代码示例

let vec_of_vecs_of_usize: Vec<Vec<usize>> = vec![vec![1], vec![2], vec![3]];

println!("{}", vec_of_vecs_of_usize.children());

实现者

默认情况下,此软件包包含一些电池组件,并且 MemoryReport 特性已经为一些 corestd 对象实现了。

以下列出了所有默认实现者。此列表可能会在未来发生变化。

整数

  • i8
  • i16
  • i32
  • i64
  • i128
  • isize

无符号整数

  • u8
  • u16
  • u32
  • u64
  • u128
  • usize

浮点数和其他

  • f32
  • f64
  • bool
  • char

堆分配

  • Vec
  • HashMap
  • HashSet
  • BinaryHeap
  • LinkedList
  • BTreeMap
  • BTreeSet

指针和引用

  • &T

未来计划

  • [] 创建 derive 宏
  • [] 进一步实现 corestd 对象

许可

Mozilla Public License 版本 2.0

无运行时依赖

功能