xwrust::xwmm

Module allocator

source
Expand description

§XWOS RUST:全局内存分配器

Rust的 #![no_std] 环境要求用户定义 global_allocator ,作为动态内存管理的实现。 标准的Rust库依赖crate libc的 memalign()free() 函数来实现 global_allocator 。 XWOS RUST不依赖crate libc,使用 xwos/mm/mempool 算法来实现 global_allocator 。 同时,XWOS RUST也提供虚假的 global_allocator ,用于禁止动态内存的情况。

§允许动态内存的情况

若用户需要使用基于动态内存的特性,例如 Box<T>Arc<T> , 需要在应用代码中定义 GLOBAL_ALLOCATOR 并赋值为 AllocatorMempool

#![no_std]
use xwrust::xwmm::allocator::AllocatorMempool;

#[global_allocator]
pub static GLOBAL_ALLOCATOR: AllocatorMempool = AllocatorMempool;

#[no_mangle]
pub unsafe extern "C" fn xwrust_main() {
    // 用户代码
}

同时,用户需要在C语言层面提供 xwrust_mempool 的定义, 例如 XWOS/xwbd/WeActMiniStm32H750/bm/xwac/xwrust/allocator.c

#include <xwos/mm/mempool/allocator.h>

extern xwsz_t axisram_mr_origin[];
struct xwmm_mempool * xwrust_mempool = (void *)axisram_mr_origin;

§禁止动态内存的情况

若用户禁止在代码中使用动态内存,只使用静态内存, 需要在应用代码中定义 GLOBAL_ALLOCATOR 并赋值为 AllocatorDummy

use xwrust::xwmm::allocator::AllocatorDummy;

#[global_allocator]
pub static GLOBAL_ALLOCATOR: AllocatorDummy = AllocatorDummy;

#[no_mangle]
pub unsafe extern "C" fn xwrust_main() {
    // 用户代码
}

在禁止使用动态内存管理的场合下,下列模块不可以使用:

Structs§