以freertos中heap_4.c中对内存的管理举例说明。
如下是初始状态,即对该内存块管理的初始状态;
xStart.next指向的空间放的是BlockLink_t的管理结构体,那么该管理结构体的size是要包括该管理结构体大小的。
如下图即可看出在申请了一块出去之后的状况;
橙色next表示都是还未分配的地方;
浅绿色表示分配出去的地方;通过该图片右下角的例子看到next=0,size=0x80000038, 实际上对于应用申请的大小是0x38-sizeof(BlockLink_t)=0x30;
以下面这图继续说明,浅绿色表示已经分配出去的,橙色表示还未分配的;
当将已经分配的第三块释放后,就变成了如下图片;
当继续释放第6快时,会发现有个合并操作,合并后即变成下图。