内存管理指的是对一块内存重复使用的功能,通过malloc 和 free来对外提供接口。
Freertos 内存管理不属于Freertos 内核模块,比较独立,Freertos 官方给了5种管理方式,分别为heap_1.c,heap_2.c,heap_3.c,heap_4.c,heap_5.c,除了heap_3.c (堆空间在CPU主堆栈上)之外,其他4种用的堆空间都是一个全局数组(static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ]),这5种区别如下:
|
序号 |
支持malloc |
支持free |
|
heap_1.c |
支持,按照地址+长度的方式依次从低地址向高地址分配。 |
不支持。 |
|
heap_2.c |
支持,将所有空闲块用链表的形式连接起来,连接方式是块大小从小到大依次连接,固定一个开始节点和结束节点,这里的开始节点大小为0,结束节点大小为堆空间的值。 |
支持,free 之后,将节点插入到空闲块链表中,不对块大小进行合并(因为地址可能不是连续的,所以不能合并)。 |
|
heap_3.c |
支持,只是封装了标准库的malloc,堆空间是在CPU的主堆栈中,Cortex-M3 默认是500Byte,具体实现可以看标准库源码。 |
支持,只是封装了标准库的free,具体实现可以看标准库源码。 |
|
heap_4.c |
支持,将所有空闲块用链表的形式连接起来,连接方式是块地址从低到高依次连接,固定一个开始节点和结束节点。 |
支持,free 之后,将节点插入到空闲块链表中,对块大小进行合并,需要判断即将插入的块的前后是否有空闲块可以合并。 |
|
heap_5.c |
支持,在heap_4.c的基础上,增加了多个堆区的功能。 |
支持,和heap_4.c 实现一样。 |

4328

被折叠的 条评论
为什么被折叠?



