#heap-allocator #pointers #applications #friendly #alloc #type #memory-allocator

no-std no_alloc

适用于无堆分配器应用程序的嵌入式友好指针类型

1个不稳定版本

0.1.0 2020年7月16日

#17 in #heap-allocator

Unlicense/0BSD

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