如何管理一段内存的分配和释放---3

以freertos中heap_4.c中对内存的管理举例说明。

如下是初始状态,即对该内存块管理的初始状态;

xStart.next指向的空间放的是BlockLink_t的管理结构体,那么该管理结构体的size是要包括该管理结构体大小的。

如何管理一段内存的分配和释放---3  如何管理一段内存的分配和释放---3

如下图即可看出在申请了一块出去之后的状况;

橙色next表示都是还未分配的地方;

浅绿色表示分配出去的地方;通过该图片右下角的例子看到next=0,size=0x80000038, 实际上对于应用申请的大小是0x38-sizeof(BlockLink_t)=0x30;

如何管理一段内存的分配和释放---3

以下面这图继续说明,浅绿色表示已经分配出去的,橙色表示还未分配的;

如何管理一段内存的分配和释放---3

当将已经分配的第三块释放后,就变成了如下图片;

如何管理一段内存的分配和释放---3

当继续释放第6快时,会发现有个合并操作,合并后即变成下图。

如何管理一段内存的分配和释放---3