課本源碼部分
第8章 動態存儲管理 - 存儲緊縮
——《數據結構》-嚴蔚敏.吳偉民版
源碼使用說明 鏈接☛☛☛ 《數據結構-C語言版》(嚴蔚敏,吳偉民版)課本源碼+習題集解析使用說明
課本源碼合輯 鏈接☛☛☛ 《數據結構》課本源碼合輯
習題集全解析 鏈接☛☛☛ 《數據結構題集》習題解析合輯
本源碼引入的文件 鏈接☛ Status.h
相關測試數據下載 鏈接☛ 數據包
文檔中源碼及測試數據存放目錄:數據結構\▲課本算法實現\▲08 動態存儲管理\04 StorageCompacting
“存儲緊縮”是“堆”結構的動態存儲管理方法。
在整個動態存儲過程中,不管哪個時刻,可利用空間都是一個地址連續的存儲區,在編譯程序中稱之為"堆",每次分配都是從這個可利用空間中劃出一塊。其實現辦法是:設立一個指針,稱之為堆指針,始終指向堆的最低(或最高)地址。當用戶申請N個單位的存儲塊時,堆指針向高地址(或低地址)稱動N個存儲單位,而移動之前的堆指針的值就是分配給用戶的占用塊的初始地址。
反之,當需要回收用戶釋放的空閒塊時,由於系統可利用空間始終是一個地址連續的存儲快,因此回收時必須將所釋放的空閒塊合並到整個堆上去才能重新使用,這就是“存儲緊縮”任務。
存儲緊縮通常有兩種做法,一種是一旦有用戶釋放存儲塊即進行回收緊縮,另一種是在程序執行過程中不回收用戶隨時釋放的存儲塊,直到可利用空間不夠分配或堆指針指向最高地址時才進行存儲緊縮。此時緊縮的目的是將堆中所有的空間塊連成一塊,即將所有的占用塊都集中到可利用空間的低地址區,而剩余的高地址區成為一整個地址連續的空閒塊。
文件三 ☛ StorageCompacting-main.c (測試文檔)
測試結果展示