目录
Heap_1:适用于一旦创建好内存,就不删除的任务。 (本质是分配的大数组做内存堆.)
Heap_2:适用于重复分配和删除具有相同堆栈空间任务。(本质是分配的大数组做内存堆.)
Heap_3:为对内存空间的操作,简单的封装了malloc和free。具有线程保护,但无空闲内存合并。
Heap_4:内可将相邻的空闲内存合并。存储顺序小地址在前(本质是分配的大数组做内存堆.)
Heap_5:内存管理策略允许内存堆跨越多个非连续的内存,切需要初始化,其他和4相似。
内存管理的介绍
FreeRTOS创建任务、队列、信号量等的时候有两种方法
——动态申请所需要的RAM。
——静态方法自行创建“static”定义。
内存管理主要针对,FreeRTOS提供的5中内存管理策略讨论的。
总的来说heap1最简单,单只能申请不能释放。heap2提供了内存释放函数,但存在内存碎片问题。
heap3是对malloc和free的简单封装,提供线程保护。heap4提供了内存合并。heap5支持不连续内存块。
在使用中需要选取一种策略,使用者可以选择其中某一种。路径:FreeRTOS->Source->portable->MemMang.
内存碎片
内存碎片化是一个概念性的问题,指的是不合理的内存操作会导致内存碎片化,以至于最后有很多碎片化空间,
无法整块的分配内存。
内存碎片化:内存经过多次的申请和释放以后,会导致碎片化。
内存碎片化的危害:内存碎片化后,会导致虽然可用内存很多,但是可能导致连续的物理内存申请失败,无法内存分配。