c语言中有两个概念经常一起被提及,堆和栈。
栈一般是系统调用,用于函数调用中保存现场(局部变量等)。不难想象,函数调用中主函数往往是最先执行,调用其他函数,然后最后返回。而最深层次的函数(内部不调用其他任何函数的函数)往往是执行完就离开,所以使用栈管理函数调用最为合适。
堆则一般是由程序员调用并管理。最直观的,一般malloc函数和free函数都是操作的这个空间,不过freeRTOS中一般则是使用freeRTOS中定义的函数(pvPortMalloc和vPortFree代替malloc和free函数)
由 configTOTAL_HEAP_SIZE 定义大小的简单数组
Heap_1.c 实现了一个非常基本的 pvPortMalloc()版本,而且没有实现 pvPortFree()。
heap_2 采用了一个最佳匹配算法来分配内存,并且支持内存释放。
Heap_2.c 并不会把相邻的空闲块合并成一个更大的内存块,所以会产生内存碎片
——如果分配和释放的总是相同大小的内存块,则内存碎片就不会成为一个问题。
Heap_2.c 适合用于那些重复创建与删除具有相同栈空间任务的应用程序
Heap_3.c 简单地调用了标准库函数 malloc()和 free(),但是通过暂时挂起调度器使得函数调用备线程安全特性。
heap_4.c相较于heap_2.c多了合并内存的功能。