1. 引言
在实时操作系统(RTOS)中,内存管理不仅仅是简单的分配与释放,还要考虑实时性、碎片化和系统稳定性三个维度。嵌入式设备通常资源极为受限,RAM 仅有几十到几百 KB;一旦出现内存碎片或分配失败,可能导致系统不可预测的崩溃。与此同时,任务栈大小配置的不合理,也会导致栈溢出或浪费宝贵内存。因此,本篇将全面介绍 RTOS 中各种内存管理方案与栈优化策略,并通过实战案例展示如何在 STM32 平台上进行性能测试与调优。
2. RTOS 内存管理方案概览
2.1 FreeRTOS 的 heap_1 到 heap_5
FreeRTOS 针对不同场景,提供了五种内存方案:
-
heap_1:最简单的无释放版本
只提供pvPortMalloc
和不实现vPortFree
,因此不存在碎片,但无法释放内存,适用于只有静态分配场景。 -
heap_2:支持释放但不合并空闲块
实现vPortFree
,但释放后并不与相邻空闲块合并,碎片风险较大,适用于小型系统、释放操作较少的场景。 -
heap_3:使用标准库 malloc/free
直接包装malloc
/free
,依赖底层 C 库实现,实时性和可控性差,通常用于快速原型或不严格的系统。 -
heap_4:带合并功能的简单分区分配器
在heap_2
基础上,释放后合并前后空闲块,降低碎片化,同时保留快速分配特性,适合大多数嵌入式 RTOS 项目。 -
heap_5:多内存区域支持
可定义多个不连续内存区域进行分配,便于使用内部 SRAM 和外部 SDRAM 混合场景,但管理复杂度提升。
2.2 TLSF、Mspace 与其他算法对比
一些工业级或安全关键项目,倾向于更先进的算法: