FreeRTOS提供了几个内存管理的方案,其中一个实现较好的方式是heap4。本篇就来形象讲述heap4的工作原理。
本文暂时只用作自己对heap4的工作机制的总结和记录,有空了再修改成教程吧,所以,很多临时的图片就直接往上贴了
基本原理:
ucHeap是一块由bss段分配的内存区域,heap4的核心内存管理特点是只监控空闲块(free block),不直接监控分配块。不管是空闲块还是分配块,其内存空间都由一个2-word的控制结构开头,第一个word是下一个空闲块的地址,第二个word用来标记内存大小。
空闲块由xStart开始,依次通过链表连接在一起组成free list。分配空间时,将会从头(xStart)开始找空间足够的空闲块。找到后,将空闲块原来的控制块进行修改,第一个word修改为0,表示该块已经不是空闲块。由于现在这个空闲块的一部分已经被分配,所以第二给我word将被修改为新分配的大小(注意,这里的新分配的大小不仅仅是malloc时候请求的size,而是要加上前面的控制块的大小并且进行对其处理。对于每一个内存控制块而言,其第二个word总是用于被描述其所管理的整个、也就是包含控制块自身的内存的大小),另外,由于该块已经被分配,将第二个word的最高位标记为1,用于分配标记(因此先前括号中我使用了“描述”这个词而不是“等于”)。那么从空闲块中分离出来剩下的那