在单片机芯片上,如果不考虑出厂固化的ROM空间的话,通常开发者能接触到的存储空间主要分两种:掉电可保存数据的片内FLASH和掉电不可保存数据的片内RAM。
动态内存堆管理和静态内存池管理
https://www.rt-thread.org/document/site/programming-manual/memory/memory/
在运行操作系统的单片机上面,代码和变量会占用一部分固定的内存开销,操作系统在初始化的时候,会去除掉这部分已经占用的内存,把剩下的闲置内存纳入到系统堆里面进行统一管理,不管是动态堆内存,还是静态内存池,都是使用这部分闲置空间的。
动态内存堆管理
小内存分配算法,slab算法,memheap算法
关于动态堆内存管理,操作系统提供了以下API接口函数,如下图所示。
主要是向系统申请内存的时候,都要遍历一次空闲内存的链表,查找可用的内存块,然后再分配给用户,而且这种方式不可避免地会产生内存碎片,所以这种内存管理方式的效率不是很高。这是一种“用时间换空间”的内存管理方式。
关于静态内存池的工作机制,如下图所示。
内存管理相关的应用示例,主要是为了验证动态内存堆管理和静态内存池管理相关的API函数接口,这里包含两个示例,分别是内存堆管理示例和内存池管理示例。