在单片机芯片上,如果不考虑出厂固化的ROM空间的话,通常开发者能接触到的存储空间主要分两种:掉电可保存数据的片内FLASH和掉电不可保存数据的片内RAM。

 

动态内存堆管理和静态内存池管理

https://www.rt-thread.org/document/site/programming-manual/memory/memory/

 

在运行操作系统的单片机上面,代码和变量会占用一部分固定的内存开销,操作系统在初始化的时候,会去除掉这部分已经占用的内存,把剩下的闲置内存纳入到系统堆里面进行统一管理,不管是动态堆内存,还是静态内存池,都是使用这部分闲置空间的。

【RT-Thread学习笔记】RT-Thread内存管理学习总结_RT-Thread

 

动态内存堆管理

 

小内存分配算法,slab算法,memheap算法

关于动态堆内存管理,操作系统提供了以下API接口函数,如下图所示。

【RT-Thread学习笔记】RT-Thread内存管理学习总结_RT-Thread_02

 

主要是向系统申请内存的时候,都要遍历一次空闲内存的链表,查找可用的内存块,然后再分配给用户,而且这种方式不可避免地会产生内存碎片,所以这种内存管理方式的效率不是很高。这是一种“用时间换空间”的内存管理方式。

 

关于静态内存池的工作机制,如下图所示。

【RT-Thread学习笔记】RT-Thread内存管理学习总结_RT-Thread_03

 

内存管理相关的应用示例,主要是为了验证动态内存堆管理和静态内存池管理相关的API函数接口,这里包含两个示例,分别是内存堆管理示例和内存池管理示例。

【RT-Thread学习笔记】RT-Thread内存管理学习总结_RT-Thread_04