#bump-allocator #slice #space #sourcing #embedded #tight #user-provided

no-std bump-into

从用户提供的切片中获取空间的no-std bump分配器

23次发布

0.8.3 2023年2月17日
0.8.2 2022年7月3日
0.8.1 2022年6月30日
0.8.0 2022年2月3日
0.2.0 2020年2月20日

#729内存管理

Download history 31/week @ 2024-03-30 6/week @ 2024-04-06

63 每月下载量

MIT OR UPL-1.0

57KB
936

bump-into

crates.io docs.rs

一个no_std bump分配器,从用户提供的可变切片中获取空间,而不是从全局分配器中获取,这使得它适合用于嵌入式应用程序和紧循环。

丢弃行为

BumpInto分配中持有的值永远不会被丢弃。如果必须丢弃,可以使用core::mem::ManuallyDrop::dropcore::ptr::drop_in_place显式(且不安全)地丢弃它们。在安全代码中,您可以分配一个Option并通过用None覆盖它来丢弃内部值。

示例

use bump_into::{self, BumpInto};

// allocate 64 bytes of uninitialized space on the stack
let mut bump_into_space = bump_into::space_uninit!(64);
let bump_into = BumpInto::from_slice(&mut bump_into_space[..]);

// allocating an object produces a mutable reference with
// a lifetime borrowed from `bump_into_space`, or gives
// back its argument in `Err` if there isn't enough space
let number: &mut u64 = bump_into
    .alloc_with(|| 123)
    .ok()
    .expect("not enough space");
assert_eq!(*number, 123);
*number = 50000;
assert_eq!(*number, 50000);

// slices can be allocated as well
let slice: &mut [u16] = bump_into
    .alloc_n_with(5, core::iter::repeat(10))
    .expect("not enough space");
assert_eq!(slice, &[10; 5]);
slice[2] = 100;
assert_eq!(slice, &[10, 10, 100, 10, 10]);

复制

版权(c)2020-22 autumnontape

该项目可以在MIT或UPL 1.0许可的条款下复制,任选其一。每个许可证的副本都包含在内。

无运行时依赖