14个版本
0.2.5 | 2024年2月17日 |
---|---|
0.2.4 | 2022年10月21日 |
0.2.3 | 2021年5月13日 |
0.2.2 | 2021年1月31日 |
0.0.7 |
|
在 内存管理 中排名 33
每月下载量 21,372
用于 12 crates
115KB
1K SLoC
static-alloc
具有静态、内联存储的通用全局分配器。
目标和目标平台
为仅保证程序映像在内存中作为加载器提供的内存的极低资源约束环境提供分配器。可能的用例包括无操作系统开发、嵌入式、引导加载程序(甚至阶段0/1)。
主要目标是类似于标准库的简洁性、正确性和最小假设。
用法
作为具有一些安全分配扩展的alloc
的全局分配器
use static_alloc::Bump;
#[global_allocator]
static A: Bump<[u8; 1 << 16]> = Bump::uninit();
fn main() {
// Vec occupying `1 << 7` bytes
let v = vec![0xdeadbeef_u32; 32];
// … or allocate values directly.
let buffer: &mut [u32; 32] = A.leak([0; 32])
.unwrap();
buffer.copy_from_slice(&v);
}
您也可以将其用作局部分配器,在堆栈上创建动态值。在这种情况下,您可能需要更谨慎地使用资源,以免溢出堆栈。当与without-alloc
一起使用时,其优点更大,后者提供了您从alloc
熟悉的高级数据结构。
use static_alloc::Bump;
fn main() {
for _ in 0..100 {
let local: Bump<[u8; 32]> = Bump::uninit();
let temp_buffer = local.leak([0; 32]);
// Resources are cleaned up.
}
}
贡献
欢迎提交引入更多测试或文档的PR!无论您提交了什么,都应该考虑简单性和可组合性,无法以草案形式表达的想法可能过于复杂或关注不足。PR应非常不情愿地引入新依赖项,并且应不包含非可选依赖项。
请只提交草案问题,功能请求和“帮助”问题将被关闭(如果您很幸运,会有最后的评论)。稳定性胜过增长。我无法在除了对这个项目的内在动机之外做出任何长期承诺。因此,我更喜欢高度可用的核心,而不是只有部分可用的庞大接口。
附加信息
本项目受Zlib、Apache-2.0或MIT许可协议约束。您可以选择Unlicense许可协议,在这种情况下,版权声明表示将尽可能多的部分贡献给公共领域。