#allocator #off #allocation #turn #lock #alive #alloc

no-std nalloc

可开启和关闭的分配器包装器

3个版本

0.1.2 2020年6月5日
0.1.1 2020年6月5日
0.1.0 2020年6月5日

#382 in 内存管理

MIT/Apache

8KB
71

此crate包含一个分配器,可以用于包装另一个分配器以开启和关闭分配。这主要用于单元测试。

使用方法:声明一个带有#[global_allocator]属性的静态变量。它可以包装实现GlobalAlloc的任何分配器。

# extern crate std;
#[global_allocator]
static ALLOCATOR: nalloc::NAlloc<std::alloc::System> = {
    nalloc::NAlloc::new(std::alloc::System)
};

默认允许分配。要防止分配,请在分配器上调用deny方法。当尝试在锁存在时进行分配时,进程将终止。

let this_is_allowed = vec![1, 2, 3];

let _lock = ALLOCATOR.deny();
let this_will_abort = vec![4, 5, 6];

限制

并行测试

请注意,默认情况下,测试执行器会使用此分配器,如果将其添加到测试模块中。这将导致问题,因为测试执行器本身会分配内存。您可以通过使用cargo test -- --test-threads=1来解决这个问题。

终止

如果尝试在锁存在时进行分配,进程将终止。这意味着整个进程将被终止,而不仅仅是单个线程,并且无法通过catch_unwind捕获。

无运行时依赖