3个版本

0.2.2 2022年10月21日
0.2.1 2020年1月19日
0.2.0 2020年1月17日

#483内存管理

Download history 1635/week @ 2024-03-14 1545/week @ 2024-03-21 1829/week @ 2024-03-28 1800/week @ 2024-04-04 1743/week @ 2024-04-11 1883/week @ 2024-04-18 2102/week @ 2024-04-25 2305/week @ 2024-05-02 2676/week @ 2024-05-09 5617/week @ 2024-05-16 7060/week @ 2024-05-23 8935/week @ 2024-05-30 6837/week @ 2024-06-06 6672/week @ 2024-06-13 5328/week @ 2024-06-20 4376/week @ 2024-06-27

25,416 每月下载量
用于 33 个crate(直接使用4个)

MIT 协议

155KB
2K SLoC

without-alloc

Crates.io Status Docs.rs Status License CI Status

不需要全局分配器的动态数据结构。

用法

这允许创建不需要动态分配的动态和递归数据结构。以下示例使用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();

依赖项