1、需要額外的虛拟存儲器時,使用一種動态存儲器配置設定器(dynamic memory allocator)。一個動态存儲器配置設定器維護着一個程序的虛拟存儲器區域,稱為堆(heap)。在大多數的unix系統中,堆是一個請求二進制0的區域;對于每個程序,核心維護着一個變量brk,它指向堆的頂部。

2、配置設定器将堆視為一組不同大小的塊(block)的集合來維護。每個塊就是一個連續的虛拟存儲器組塊(chunk),要麼是已配置設定的,要麼是未配置設定的。
1)顯式配置設定器(explicit allocator):如通過malloc,free或C++中通過new,delete來配置設定和釋放一個塊。
2)隐式配置設定器(implicit allocator):也叫做垃圾收集器(garbage collector)。自動釋放未使用的已配置設定的塊的過程叫做垃圾回收(garbage collection)。
3、malloc不初始化它傳回的存儲器,calloc是一個基于malloc的包裝(wrapper)函數,它将配置設定的存儲器初始化為0。想要改變一個以前已配置設定的塊的大小,可以使用realloc函數。
4、配置設定器必須對齊塊,使得它們可以儲存任何類型的資料對象。在大多數系統中,以8位元組邊界對齊。
不修改已配置設定的塊:配置設定器隻能操作或者改變空閑塊。一旦被配置設定,就不允許修改或者移動它。
5、碎片(fragmentation)
有内部碎片(internal)和外部碎片(external)。
外部碎片:在一個已配置設定塊比有效載荷在時發生的。(如對齊要求,配置設定最小值限制等)
外部碎片:當空閑存儲器合計起來足夠滿足一個配置設定請求,但是沒有一個單獨的空閑塊足夠大可以來處理這個請求時發生的。
6、隐式空間連結清單
放置配置設定的塊的政策有:首次适配(first fit),下一次适配(next fit),和最佳适配(best fit)。
如果空閑塊已經最大程度的合并,而仍然不能生成一個足夠大的塊,來滿足要求的話,配置設定器就會向核心請求額外的堆存儲器,要麼是通過調用nmap,要麼是通過調用sbrk函數;配置設定器都會将額外的(增加的)存儲器轉化成一個大的空閑塊,将這個塊插入到空閑連結清單中,然後将被請求的塊放置在這個新的空閑塊中。
7、書中對配置設定器的設計舉了一個小例子,10.9.12節。
8、一種流行的減少配置設定時間的方法,稱為分離存儲(segregated storage),維護多個空閑連結清單,其中每個連結清單中的塊有大緻相等的大小。
關于“簡單分離存儲”、“分離适配”、“夥伴系統”等概念,10.9.14節進行了叙述。