如何管理一段內存的分配和釋放---3

以freertos中heap_4.c中對內存的管理舉例說明。

如下是初始狀態,即對該內存塊管理的初始狀態;

xStart.next指向的空間放的是BlockLink_t的管理結構體,那麼該管理結構體的size是要包括該管理結構體大小的。

  

如下圖即可看出在申請了一塊出去之後的狀況;

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

淺綠色表示分配出去的地方;通過該圖片右下角的例子看到next=0,size=0x80000038, 實際上對於應用申請的大小是0x38-sizeof(BlockLink_t)=0x30;


以下面這圖繼續說明,淺綠色表示已經分配出去的,橙色表示還未分配的;


當將已經分配的第三塊釋放後,就變成了如下圖片;


當繼續釋放第6快時,會發現有個合併操作,合併後即變成下圖。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章