uC GUI學習筆記 記憶體管理

2021-06-19 08:59:11 字數 1714 閱讀 9703

與uc/os記憶體管理相似,ucgui也存在類似儲存控制塊的結構,不過它不叫記憶體控制塊,而叫記憶體分配資訊節點(或叫記憶體管理單元)。方便起見,我們暫且也將其稱為儲存控制塊。儲存控制塊以陣列形式存在,同時也構成雙向鍊錶,而ucos中的儲存控制塊則是單向鍊錶。與ucos記憶體管理剛好相反,在ucos中的記憶體控制塊鍊錶是用於記錄未分配的儲存控制塊的,而ucgui的雙向鍊錶則是用於記錄已經分配的儲存控制塊。

控制代碼:實際就是陣列某一元素的索引號。

uc/gui動態記憶體分配過程:

1.    最初,假如進行4次記憶體申請操作:

(1)最初申請的記憶體,只要沒有進行釋放操作,那麼所申請的記憶體塊一定都是連續的。

(2)陣列中第0個元素始終被系統占用,用於維護煉表頭結點。所以記憶體分配必須從索引1開始。

2.    釋放掉第2塊記憶體後:

釋放記憶體的操作很簡單:

(1)從陣列的角度:將該控制塊中的size引數清零,即標記為空閒控制塊。

(2)從鍊錶的角度:將該節點從雙鏈表中刪除;

3.    申請了一塊更大的記憶體:

(1)從陣列的角度,查詢空閒儲存控制塊,即size引數為0的控制塊;

(2)從鍊錶的角度,查詢相鄰節點之間是否有符合條件的空閒記憶體;

(3)將(1)找到的控制塊插入到(2)中合適的位置。

(4)填充儲存控制塊的相關資訊,並返回陣列索引號。

4.    又申請了一塊較小的記憶體:

(1)從陣列的角度,查詢空閒儲存控制塊,即size引數為0的控制塊

(2)從鍊錶的角度,查詢相鄰節點之間是否有符合條件的空閒記憶體;

(3)將(1)找到的控制塊插入到(2)中合適的位置。

(4)填充儲存控制塊的相關資訊,並返回陣列索引號。

所以,被占用記憶體塊的排列順序是與控制塊鍊錶的順序一一對應的。即鍊錶中的

off引數是從低到高排列的,而陣列中的

off引數是無序的。

關鍵函式偽**

分配函式:_alloc

_alloc()

查詢空閒儲存控制塊函式:findfreehandle

findfreehandle()

查詢空閒記憶體函式:findhole

findhole()

釋放函式:gui_alloc_free

gui_alloc_free()

C學習筆記 記憶體管理

乙個c語言變數的作用域可以是 塊 作用域,函式作用域或者檔案作用域 塊是 之間的一段 同乙個 塊不可以有重名變數 auto自動變數 一般情況下 塊內部定義的變數都是自動變數 也可以顯示的使用aotu關鍵字 auto int i register暫存器變數 通常變數在記憶體當中,如果能把變數放到cpu...

WinApi學習筆記 記憶體管理

每個程序都有乙個私有的虛擬位址空間 系統將每個程序的虛擬位址空間對映到物理記憶體上 為了實現每個程序都有乙個私有的虛擬位址空間系統為每個程序都建立了乙個頁目錄和一組頁表 每個程序的頁表是獨立的 而核心空間的頁表是所有程序共享的 x86平台上有乙個cr3暫存器,該暫存器儲存當前執行的程序的頁目錄位址 ...

IOS 學習筆記14 記憶體管理(2)記憶體管理策略

文章中帶有lpstudy的字樣表明是我個人的理解,可能會有不對的地方,敬請指教。html view plain copy 記憶體管理策略 在引用計數機制下,你可以採用nsobject protocol的方法和和標準的方法命名約定進行記憶體管理。nsobject也定義了乙個dealloc方法,它在物件...