FreeRTOS heap 4 机制解析

本文介绍了FreeRTOS中的heap4内存管理机制。heap4通过监控空闲块而非分配块来管理内存,使用2-word控制结构标记内存大小。空闲块以链表形式组织,分配时从头部开始寻找空间并分割出新块。释放时尝试合并相邻空闲块。此外,还提及了一个用于Linux环境下分析FreeRTOS内存的工具。
摘要由CSDN通过智能技术生成

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,用于分配标记(因此先前括号中我使用了“描述”这个词而不是“等于”)。那么从空闲块中分离出来剩下的那

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值