嵌入式内存管理探究-基于FreeRTOS
文章封面
本文基于嵌入式裸机或RTOS系统下内存管理方法的探究,灰色方块为正在使用的内存块,白色为可用内存块。 好的内存管理算法,有以下几个特征:
-
内存碎片化小
-
故障调试能力:发生内存泄漏和踩踏时,可追溯位置,便于定位故障
-
管理成本小:管理的代码本身占用空间小,从空间复杂度
-
申请和释放效率高:时间复杂度
FreeRTOS的heap_5算法
-
相比 heap_4 支持地址不连续的两个内存区域,比如芯片内置RAM+外挂SDRAM。
-
基本思想:创建一个可用内存块链表,内存申请时从链表的内存块中取,释放时,将内存块重新加入到链表
- 链表中的每块内存由三部分组成:
-
指向下一个内存块的指针;
-
此内存块的可用空间大小;
-
可用的内存数据区域;
-
1-1 基本数据结构
内存块管理
typedef struct A_BLOCK_LINK
{
struct A_BLOCK_LINK *pxNextFreeBlock; /*<< The next free block in the list. */
siz