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次
62KB
761 代码行
umm-malloc-rs
提供使用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