快捷搜索: 王者荣耀 脱发

FreeRTOS的heap4.c代码逐行分析

直入主题-----> 这个函数目的主要是在第一次调用malloc函数时,将根据字节对齐计算出可以应用的分配空间,并且初始化可用的链表结构!(下图盗用网络图片,画的很好)

xBlockAllocatedBit变量说明:Heap_4用了BlockLink_t中xBlockSize的最高一位来标识某个内存块是否处于空闲状态,这样一来,每一个分配出去的内存块大小就有限制了。例如,我用的是STM32F103,size_t是定义为unsigned int类型的,32位,可支持到4G的内存空间。但是最高1位用来指示空间状态的话,那就只有31位去标识内存块地址,即只支持到2G的内存空间。所以用Heap_4还是有一点点代价的,特别是用在16位或8位的单片机上; heap4.c中最大的特点是在回收内存时添加了相邻空闲块的合并的算法,该算法是通过prvInsertBlockIntoFreeList函数实现。

空闲块通过链表结构进行管理,当需要分配一块内存时,遍历链表,找到第一块够大的空闲块进行分配,从链表中移除出来,同时检查这块空间是否过大,如果过大就将空闲块进行切割,然后将剩下部分重新用BlockLink_t描述并插入到链表中。

经验分享 程序员 微信小程序 职场和发展