#分配器 #裸机 #nightly #no-std

nightly no-std palloc

为裸机系统提供的可移植链表分配器

4 个版本

0.1.3 2021年11月11日
0.1.2 2021年11月11日
0.1.1 2021年11月11日
0.1.0 2021年11月11日

#1838嵌入式开发

自定义许可证

26KB
480

Palloc

docs.rs crates.io

嵌入式/裸机系统的可移植链表分配器。

使用此包

[dependencies] 部分包含此包

palloc = "0.1.0"

此包使用 Rust 的不稳定功能,因此需要 nightly 更新通道。使用以下命令更新项目文件夹的工具链:

rustup override set nightly

包功能

  • spin(默认):提供一个使用 自旋锁 的 GlobalAllocator 实现。
  • allocator_api(默认):启用 Allocator 特性并在所有全局分配器上实现它。

示例

#![no_std]

use core::ptr::NonNull;
use palloc::{GlobalPalloc, SpinPalloc};

// the allocator is initialized using a const empty function, but it is
// not ready yet, we must initialize it first in main.
#[global_allocator]
static mut ALLOCATOR: SpinPalloc = SpinPalloc::empty();

fn main() {
    // First of all we must define the bounds of our heap. Check
    // Palloc or GlobalPalloc documentation for informations.

    // Heap starting address
    let heap_start = 0x8000 as *mut u8;
    // Heap size
    let heap_size = 0xF000;

    // accessing statics is an unsafe operation
    // so it must be sorrounded by an unsafe block
    unsafe { ALLOCATOR.init(NonNull::new(heap_start).unwrap(), heap_size) };

    // we can now use the heap!
    // ...
}

文档

所有需要了解的信息都已写在 rustdocs 中。点击 readme 标题下的徽章或 点击这里 读取完整文档。

依赖项

~150KB