動態儲存管理的基本問題是:系統如何按請求分配記憶體,如何**記憶體再利用。提出請求的使用者可能是系統的乙個作業,也可能是程式中的乙個變數。
空閒塊
未曾分配的位址連續的記憶體區稱為「空閒塊」。
占用塊
已分配給使用者使用的位址連續的記憶體區稱為「占用塊」。
系統剛剛啟動時,整個記憶體可看做乙個大的「空閒塊」,隨著使用者請求的進入,系統依次分配相應的記憶體。
經過一段時間後,有的程式執行結束,釋放掉它所占用的記憶體,使之變為空閒塊,這就使整個記憶體中空閒塊和占用塊之間出現了相互交錯的現象。如下圖:
當系統進入到圖中b),又有新的使用者請求分配記憶體時,系統該如何處理呢?
方法一:系統繼續從高位址區的空閒塊進行分配,直到無法分配。當剩餘的空閒塊不能滿足分配請求時,系統才去**所有的不再使用的記憶體區,並重新組織記憶體,緊湊所有的空閒塊為乙個大的空閒塊,以備在分配。
方法二:空閒鍊錶。空閒鍊錶中包含了所有空閒塊的資訊,乙個節點對應乙個空閒塊。當使用者請求分配時,系統所作的工作就是搜尋空閒鍊錶,按某種策略找到乙個合適的空閒塊進行分配,並刪除對應的節點。當使用者釋放所占用的記憶體時,系統**該記憶體,並將它插入到空閒鍊錶中。
C語言動態記憶體管理
1 概述 動態儲存管理的基本問題是 系統如何按請求分配記憶體,如何 記憶體再利用。提出請求的使用者可能是系統的乙個作業,也可能是程式中的乙個變數。空閒塊 未曾分配的位址連續的記憶體區稱為 空閒塊 占用塊 已分配給使用者使用的位址連續的記憶體區稱為 占用塊 系統剛剛啟動時,整個記憶體可看做乙個大的 空...
C語言動態記憶體管理
c系統的函式庫中提供了了程式動態申請和釋放記憶體儲存塊的庫函式,下面將分別介紹。1 malloc 函式 a 該函式的原型 void malloc size t size b 該函式只有乙個引數,且形參size是無符號整型,該引數代表申請空間的位元組數。c 返回值 如果記憶體池中的可用記憶體滿足需求,...
C語言動態記憶體管理
在說明c語言記憶體管理之前,要知道什麼是記憶體,記憶體我個人認為可以理解為帶有標籤的盒子,所謂的帶標籤的盒子就像我們住的寢室一樣有門牌號,盒子內只能儲存固定型別的資料或變數,就如男生寢室只能住男生一樣。那麼c語言中有多少種盒子呢?有靜態儲存區 動態儲存區 內部暫存器區域。我們通常定義的變數如果沒有特...