3个版本
0.2.2 | 2022年10月21日 |
---|---|
0.2.1 | 2020年1月19日 |
0.2.0 | 2020年1月17日 |
#483 在 内存管理
25,416 每月下载量
用于 33 个crate(直接使用4个)
155KB
2K SLoC
without-alloc
不需要全局分配器的动态数据结构。
用法
这允许创建不需要动态分配的动态和递归数据结构。以下示例使用static-alloc
crate构建一个基于动态数据的静态生命周期的列表。作为固定容量的本地内存池FixedVec
use static_alloc::Bump;
use without_alloc::{FixedVec, alloc::LocalAllocLeakExt};
let mut pool: Bump<[usize; 16]> = Bump::uninit();
// Allocate a vector with capacity of 16 from the slab.
let mut vector = pool.fixed_vec(16).unwrap();
let mut num = 0;
// Push mutable ref, not `'static`, `Copy` nor `Clone`!
vector.push(&mut num);
*vector[0] = 42;
drop(vector);
assert_eq!(num, 42);
这可能非常有用,如果您想启动另一个内核并将其传递一个描述平台的链表。
use static_alloc::Bump;
use without_alloc::{Box, alloc::LocalAllocLeakExt};
enum List {
Nil,
Cons(u8, Box<'static, List>),
}
static SLAB: Bump<[u8; 1024]> = Bump::uninit();
let base = SLAB.boxed(List::Nil).unwrap();
let one = SLAB.boxed(List::Cons(0, base)).unwrap();
let two = SLAB.boxed(List::Cons(1, one)).unwrap();