自由表

自由表(英語:free list)是一種用來實現特定動態記憶體分配方案的數據結構,也稱自由列表

基本介紹

  • 中文名:自由表
  • 外文名:free list
  • 領域:計算機
  • 性質:數據結構
簡介,動態記憶體分配,數據結構,

簡介

自由表的核心原理是將若干未分配的記憶體塊用鍊表連線起來,將未分配區域的第一個作為指向下一個未分配區域的指針使用。自由表非常適合用來實現記憶體池,因為記憶體池中對象的大小都是相同的。
用自由表實現記憶體的分配和回收非常簡單:回收記憶體時只需將記憶體塊鏈入自由表;分配時也只需從自由表的一端取下即可直接使用。如果記憶體塊的大小不一,則分配前還需要在自由表中搜尋足夠大的記憶體塊,可能有一定的額外消耗。

動態記憶體分配

計算機科學中,動態記憶體分配(Dynamic memory allocation)又稱為堆記憶體分配,是指電腦程式在運行期中分配使用記憶體。它可以當成是一種分配有限記憶體資源所有權的方法。
動態分配的記憶體在被程式設計師明確釋放或被垃圾回收之前一直有效。與靜態記憶體分配的區別在於沒有一個固定的生存期。這樣被分配的對象稱之為有一個“動態生存期”。
分配過程包括尋找一塊足夠大未被使用的記憶體。
  • 分配過程當中的問題
  • 嘗試組塊來減輕這個效應。
  • 減少碎片需要特別處理,從而導致更複雜的實現(參考算法效率)。
  • 內部和外部碎片
  • 分配器的元數據需要占用額外的空間。
通常,記憶體是從一個被稱為的記憶體池中分配出來的。高級語言封裝了記憶體地址的概念,記憶體通常是通過指針來間接訪問的。分配算法經常將組織分配釋放組塊等操作封裝成抽象的接口供上層函式調用。

數據結構

計算機科學中,數據結構(英語:data structure)是計算機中存儲、組織數據的方式。
數據結構意味著接口封裝:一個數據結構可被視為兩個函式之間的接口,或者是由數據類型聯合組成的存儲內容的訪問方法封裝。
大多數數據結構都由數列記錄、可辨識聯合、引用等基本類型構成。舉例而言,可為空的引用(nullable reference)是引用與可辨識聯合的結合體,而最簡單的鏈式結構鍊表則是由記錄與可空引用構成。
數據結構可透過程式語言所提供的數據類型引用及其他操作加以實現。一個設計良好的數據結構,應該在儘可能使用較少的時間與空間資源的前提下,支持各種程式運行。
不同種類的數據結構適合不同種類的套用,部分數據結構甚至是為了解決特定問題而設計出來的。例如B樹即為加快樹狀結構訪問速度而設計的數據結構,常被套用在資料庫和檔案系統上。
正確的數據結構選擇可以提高算法的效率(請引用算法效率)。在電腦程式設計的過程里,選擇適當的數據結構是一項重要工作。許多大型系統的編寫經驗顯示,程式設計的困難程度與最終成果的質量與表現,取決於是否選擇了最適合的數據結構。
系統架構的關鍵因素是數據結構而非算法的見解,導致了多種形式化的設計方法與程式語言的出現。絕大多數的語言都帶有某種程度上的模組化思想,透過將數據結構的具體實現封裝隱藏於用戶界面之後的方法,來讓不同的應用程式能夠安全地重用這些數據結構。C++JavaPython面向對象的程式語言可使用類 (計算機科學)來達到這個目的。
因為數據結構概念的普及,現代程式語言及其API中都包含了多種默認的數據結構,例如 C++標準模板庫中的容器、Java集合框架以及微軟的.NET Framework

相關詞條

熱門詞條

聯絡我們