1 个不稳定版本
0.1.0 | 2023年5月24日 |
---|
#541 in 内存管理
17KB
257 代码行
memoria
一个用于生产的糟糕的内存“分析器”。
- 定义一个
UseCase
枚举。 - 使用memoria的自定义分配器。
- 使用
Alloc::with_usecase
将用例分配给函数或代码块。 - 获取每个用例的基本内存使用统计信息,可以在程序末尾或在后台线程中定期获取。
use num_enum::{TryFromPrimitive, IntoPrimitive};
#[derive(TryFromPrimitive, IntoPrimitive, Default, Debug)]
#[repr(u32)]
enum MyUseCase {
#[default]
None,
LoadConfig,
ProcessData,
}
impl memoria::UseCase for MyUseCase {}
#[global_allocator]
static ALLOCATOR: memoria::Alloc<MyUseCase> = memoria::Alloc::new();
fn load_config() {
let _guard = ALLOCATOR.with_usecase(MyUseCase::LoadConfig);
println!("loading config...");
// consume some memory
let _temporary = vec![0u8; 256];
}
fn process_data() {
let _guard = ALLOCATOR.with_usecase(MyUseCase::ProcessData);
// consume some more memory
let _temporary = vec![0u8; 2048];
}
fn main() {
load_config();
process_data();
println!("memory usage stats:");
ALLOCATOR.with_recorder(|recorder| {
recorder.flush(
|usecase, stat| {
println!("{usecase:?}: {stat:?}");
},
|err, count| {
println!("{err:?}: {count}");
}
);
Ok(())
}).ok();
}
许可证
MIT 许可证,见 ./LICENSE
.
依赖项
~0.9–6MB
~20K SLoC