#limit #memory #allocator #alloc #allocated #byte #const-limit

limit-alloc

一个允许限制可用内存的自定义分配器

1 个不稳定版本

0.1.0 2022年7月9日

#525内存管理

GPL-3.0 许可证

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
  • 如果您需要实现CloneLimit,请使用ArcLimit。理想情况下,您将能够使用Arc<Limit<A>>,但是Arc<T>无法实现GlobalAlloc

关于对齐的说明:如果一个1字节的对齐大于1的分配(例如2字节),则会因为填充而分配2字节。但这个crate只计算1字节。因此,限制可能不完全准确。

无运行时依赖