#memory-allocator #allocator #malloc #cortex-m #arm #memory-management #api-bindings

无std umm-malloc

使用umm_malloc库为嵌入式系统提供一个全局分配器实现

7次发布

0.3.2 2023年2月14日
0.3.1 2022年2月16日
0.2.0 2021年8月23日
0.1.2 2021年2月10日

嵌入式开发中排名350

每月下载23

MIT许可证MIT

62KB
761 代码行

umm-malloc-rs

downloads crates.io docs.rs CI

提供使用umm_malloc库的全局分配器。

umm_malloc是一个小型简单的内存分配器,专为嵌入式系统设计。它能够快速分配和释放,具有有限的内存碎片。

限制

此分配器所有的分配都按8字节对齐。请求更大的对齐未实现,将引发panic。

特性

  • first-fit 使用第一个可用的块进行分配,而不是搜索更好的匹配。

  • init-if-uninitialized 在每个malloc函数中添加检查,如果堆未初始化,则尝试初始化堆(使用堆位置的extern符号)。

  • hang-if-uninitialized 在每个malloc函数中添加检查,如果堆未初始化,则进入无限循环。

  • enable-pie 编译umm_malloc C代码位置无关(-fPIE)。你可能还希望在rustc中启用它,例如-C relocation-model=pie

全局分配器关键部分

对全局分配器的并发访问是未定义行为。启用以下cargo特性之一以配置如何控制对全局分配器的访问。

  • cortex-m-interrupt-critical-section:适用于ARM Cortex-M处理器的中断禁用关键部分。
  • extern-critical-section:使用extern函数void _umm_critical_entry(uint32_t*)void _umm_critical_exit(uint32_t*)实现全局分配器的关键部分。你必须通过其他某种方式提供这些函数。注意,关键部分可以嵌套。
  • unsafe-no-critical-section:全局分配器周围没有关键部分。你必须防止全局分配器的并发使用,以避免未定义行为。

未来工作

umm_malloc具有收集指标和检测堆损坏的功能,可以通过cargo特性方便地公开。

可以将memalign的实现添加到umm_malloc中。

依赖项

~180KB