内存管理


FreeRTOS提供了五种内存管理方式,heap_1到heap_5。源码路径为FreeRTOS\Source\portable\MemMang. FreeRTOS管理的内存在此处定义。

static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];

Heap_1

只提供了pvPortMalloc,无法释放内存,适用于无需动态内存分配的场景。

Heap_2

提供了vPortFree接口,支持内存释放。添加了一个单向链表将每块内存连接在一起,并且按内存块大小从小到大排列。但是会造成内存碎片化的问题。

Heap_3

直接使用malloc和free

Heap_4

在Heap_2的基础上,使用了按内存地址从小到大排列的链表。在回收内存时如果发现相邻的可用内存块,会把它们合并成一个更大的内存块,一定程度解决了内存碎片化的问题。

Heap_5

在Heap_4的基础上,支持了对非连续内存的管理,如片外RAM。