1个不稳定版本
0.1.0 | 2020年7月16日 |
---|
#17 in #heap-allocator
32KB
651 行
no_alloc
无堆分配器应用程序的嵌入式友好指针类型。
lib.rs
:
无堆分配器应用程序的嵌入式友好指针类型。
使用方法
no_alloc
可以用来创建无需堆分配的动态大小类型的箱
#![no_main]
#![no_std]
use core::any::Any;
use cortex_m_rt::entry;
use no_alloc::{boxed_s, BoxS};
#[entry]
fn main() -> ! {
let boxed: BoxS<dyn Any, [usize; 1]> = boxed_s!(0_isize);
assert_eq!(boxed.downcast_ref::<isize>(), Some(&0));
loop {
// Application logic
}
}
编译时断言确保指针始终有足够的内存支持并具有正确的对齐方式。以下将无法编译
use core::any::Any;
use no_alloc::BoxS;
let _impossible: BoxS<dyn Any, [usize; 0]> = boxed_s!(0_isize);
有关更多信息,请参阅BoxS::new
的文档。
依赖关系
no_alloc
没有运行时依赖。
heapless
可以通过激活pool
功能来引入,以支持由全局内存池支持的箱。
功能
-
coerce_unsized
此功能需要夜间工具链
为
BoxS
实现CoerceUnsized
,绕过boxed_s
宏的要求use core::any::Any; use no_alloc::BoxS; let boxed: BoxS<dyn Any, [usize; 1]> = BoxS::new(0_isize);
-
const_generics
此功能需要夜间工具链
为任何任意长度的数组实现
Memory
,而不仅仅是几个选定的长度 -
pool
启用从全局内存池分配的智能指针。这将引入
heapless
作为依赖项。
安全性
安全性对no_alloc
至关重要。
它构建在大量不安全代码之上,但暴露的API是100%安全的。
该包经过了广泛的测试,这些测试通过 Miri 执行,作为包 CI 的一个部分。未能通过 Miri 阶段的提交不能合并到 master 分支,并且禁止发布到 crates.io。
依赖关系
~145KB