記憶池
記憶池(Memory Pool),又被稱為固定大小區塊規劃(fixed-size-blocks allocation),允許程式設計師以類似 C語言 的 malloc 或是 C++ 的 new 運算元進行動態的記憶體規劃。對於其它動態記憶體規劃的實踐來說,因為會變動記憶體區塊大小導致的碎片問題,導致在實時系統上受限於效能因此,根本無法使用。記憶池提供了一個更有效率的解決方案:預先規劃一定數量的記憶體區塊,使得整個程式可以在執行期規劃 (allocate)、使用 (access)、歸還 (free) 記憶體區塊。
有許多實時作業系統採用了記憶池,IBM 的 Transaction Processing Facility 便是其中一個例子。
一個簡單的實踐示例
這個簡單的記憶池實踐模組在編譯期規劃 3 個示例記憶池,其區塊將大小針對程式的需求做最佳化。這個程式可以下列介面來規畫、使用及歸還記憶體區塊:
記憶池與 malloc 的比較
優點
- 記憶池允許在執行期以常數時間規劃記憶體區塊,並且不會有記憶體破碎的情況產生。一次歸還記憶體中成千上萬個物件的記憶體區塊只需要一個操作,無需像 malloc 一般需要個別 free。
- 記憶池可以在階層式的樹狀結構中被分群,非常適合某些特定的程式結構,例如遞歸與迭代。
- 固定區塊大小的記憶池不需將每次規劃的資訊記錄下來(例如規劃的記憶體區塊大小,因為每次規劃都是一樣的)。針對一些小而多的記憶體區塊規劃會節省一些空間。
缺點
- 記憶池模組在使用時,必須依照程式需求來做個別調整,才能保持時間與空間效率。
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.