14 个版本 (5 个稳定版)
1.0.4 | 2019年2月11日 |
---|---|
1.0.0 | 2018年12月15日 |
0.7.1 | 2018年12月4日 |
0.7.0 | 2018年11月19日 |
#92 in #drop
每月22次下载
19KB
171 行
qadapt
debug_assert!
用于检查内存使用
请注意:此包已被废弃,改用 alloc-counter。
此分配器是编写对内存敏感的高性能代码的辅助工具;如果函数带有 #[no_alloc]
或者在 assert_no_alloc!
宏内的代码与分配器有任何交互,则会引发线程恐慌。不再需要随意分配和意外的释放 - 此库让您可以专注于编写代码,无需担心 Rust 是否成功将变量内联到堆栈中。
现在,在生产环境中分配器崩溃是一个可怕的想法;这就是为什么 QADAPT 在您以发布构建运行时设计为删除其自身代码。就像 Rust 标准库中的 debug_assert!
宏 一样,它可以在不担心意外情况导致您的应用程序崩溃的情况下安全使用。
用法
实际上使用 QADAPT 很简单。要设置分配器,将以下代码片段放置在您的程序二进制文件(main.rs)或测试中
use qadapt::QADAPT;
#[global_allocator]
static Q: QADAPT = QADAPT;
fn main() {
# // Because `debug_assertions` are on for doctests in release mode
# // we have to add an extra guard.
# if qadapt::is_active() {
assert!(qadapt::is_active());
# }
}
之后,有两种方式告诉 QADAPT 应该引发恐慌
- 使用
#[no_alloc]
过程宏标注函数
use qadapt::no_alloc;
use qadapt::QADAPT;
use std::panic::catch_unwind;
#[global_allocator]
static Q: QADAPT = QADAPT;
// This function is fine, there are no allocations here
#[no_alloc]
fn do_math() -> u8 {
2 + 2
}
// This function will trigger a panic when called
#[no_alloc]
fn does_panic() -> Box<u32> {
Box::new(5)
}
fn main() {
do_math();
let err = catch_unwind(|| does_panic());
# if qadapt::is_active() {
assert!(err.is_err());
# }
}
- 使用
assert_no_alloc!
宏计算表达式
use qadapt::assert_no_alloc;
use qadapt::QADAPT;
#[global_allocator]
static Q: QADAPT = QADAPT;
fn main() {
// This code is allowed to trigger an allocation
let b = Box::new(8);
// This code would panic if an allocation occurred inside it
let x = assert_no_alloc!(*b + 2);
assert_eq!(x, 10);
}
依赖项
~160–390KB