FreeRTOS8.0.1内存管理的最后一个堆模型Heap_4,貌似是在这一个版本才有的。所以找到的说明几乎没有。代码的开头注释也只是简单地说了一下实现了pvPortMalloc()和vPortFree()两个函数,并且能够对回收的内存块进行合并,减少碎片的出现。
(A sample implementation of pvPortMalloc() and vPortFree() that combines (coalescences) adjacent memory blocks as they are freed, and in so doing limits memory fragmentation.)
不过经过这一次的剖析之后,发现Heap_4所用的内存管理算法为首次适配法(first fit algorithm)。
和Heap_2一样,Heap_4先申请了一个数组ucHeap[ configTOTAL_HEAP_SIZE ]作为自己管理的堆空间,同样也有空闲块头结构BlockLink_t来管理空闲块。但是和Heap_2不一样的是,Heap_4用了BlockLink_t中xBlockSize的最高一位来标识某个内存块是否处于空闲状态。所以这就是为什么会有一个宏heapBITS_PER_BYTE的出现,而且定义为( ( size_t ) 8 )。这样一来,每一个分配出去的内存块大小就有限制了。例如ÿ