以freertos中heap_4.c中對內存的管理舉例說明。
如下是初始狀態,即對該內存塊管理的初始狀態;
xStart.next指向的空間放的是BlockLink_t的管理結構體,那麼該管理結構體的size是要包括該管理結構體大小的。
如下圖即可看出在申請了一塊出去之後的狀況;
橙色next表示都是還未分配的地方;
淺綠色表示分配出去的地方;通過該圖片右下角的例子看到next=0,size=0x80000038, 實際上對於應用申請的大小是0x38-sizeof(BlockLink_t)=0x30;
以下面這圖繼續說明,淺綠色表示已經分配出去的,橙色表示還未分配的;
當將已經分配的第三塊釋放後,就變成了如下圖片;
當繼續釋放第6快時,會發現有個合併操作,合併後即變成下圖。