1 个不稳定版本
0.1.0 | 2022年7月9日 |
---|
#525 在 内存管理
15KB
111 行
limit-alloc
一个允许限制可用内存的自定义分配器。
用法
use limit_alloc::Limit;
use std::alloc::System;
// Limit available RAM to 4MB
#[global_allocator]
static A: Limit<System> = Limit::new(4_000_000, System);
fn main() {
let _huge_vec: Vec<u8> = Vec::with_capacity(4_000_001);
}
您可以在本地运行此示例并查看进程如何崩溃
$ cargo run --example huge_vec
memory allocation of 4000001 bytes failed
Aborted
lib.rs
:
允许限制可用内存的分配器。
此crate实现了一些类似类型,您可以根据您的用例选择最佳选项
- 如果您在编译时知道限制,请使用
ConstLimit
,因为这将使分配器无大小(只要内部分配器也是无大小的)。 - 如果不确定或需要在同一应用程序中使用多个限制,请使用
Limit
。这是必要的,因为ConstLimit
使用静态计数器来存储分配的内存,因此无法跟踪分配器不同实例分配的内存,我们只能跟踪总分配内存。大小为1 * usize
。 - 如果您需要实现
Clone
的Limit
,请使用ArcLimit。理想情况下,您将能够使用
Arc<Limit<A>>
,但是Arc<T>
无法实现GlobalAlloc
。
关于对齐的说明:如果一个1字节的对齐大于1的分配(例如2字节),则会因为填充而分配2字节。但这个crate只计算1字节。因此,限制可能不完全准确。