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次下载

Apache-2.0

19KB
171

qadapt

crates.io docs.rs codecov travisci appveyor


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 应该引发恐慌

  1. 使用 #[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());
    # }
}
  1. 使用 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