3个版本
0.1.2 | 2020年6月5日 |
---|---|
0.1.1 | 2020年6月5日 |
0.1.0 | 2020年6月5日 |
#382 in 内存管理
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
捕获。