2个不稳定版本
0.2.0 | 2023年10月10日 |
---|---|
0.1.0 | 2022年2月20日 |
#212 在 内存管理
413 每月下载量
用于 bit-matrix
18KB
366 行
memusage
memusage
是一个包含(一些)电池的记忆使用报告。这个crate包括一个简单的特质 MemoryReport
,使您能够轻松跟踪项目中的内存使用。
使用方法
Cargo.toml
[dependencies]
memusage = "0.1.0"
MemoryReport
特质包含三个关联方法: direct
,indirect
和 children
。
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
特性已经为一些 core
和 std
对象实现了。
以下列出了所有默认实现者。此列表可能会在未来发生变化。
整数
- 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 宏
- [] 进一步实现
core
和std
对象
许可
Mozilla Public License 版本 2.0