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 在 内存管理
63 每月下载量
57KB
936 行
bump-into
一个no_std
bump分配器,从用户提供的可变切片中获取空间,而不是从全局分配器中获取,这使得它适合用于嵌入式应用程序和紧循环。
丢弃行为
在BumpInto
分配中持有的值永远不会被丢弃。如果必须丢弃,可以使用core::mem::ManuallyDrop::drop
或core::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许可的条款下复制,任选其一。每个许可证的副本都包含在内。