主記憶體:配置、連結與分段

最佳適配(best-fit)

想像為一個形狀古怪的物品挑選收納盒,方法是把每個盒子都試一遍,挑出它還塞得進去的最小那個,讓你浪費的空位最少。最佳適配就是把這份直覺套用到記憶體上:在所有大到足以容納行程的空洞中,挑最小的那個。

具體來說,當一個大小為 S 的行程到來時,最佳適配必須掃描整張空閒清單(除非清單依大小排序)以找出大小至少為 S 的最小空洞,然後從中配置 S 個位元組。剩下的小片(空洞大小減 S)變成一個新的微小空洞。其直覺是:總是使用最貼合的空洞,就能避免拆掉某個未來大行程可能需要的大空洞。

為什麼重要:最佳適配是人們最先想到的策略,因為它聽起來顯然很省——但現實並不認同。研究與模擬顯示,最佳適配較慢(它必須檢視每個空洞),而且出人意料地並不會整體省下記憶體;事實上它傾向留下一堆小到沒用的碎片,這本身就是一種外部碎裂。這是一個經典的教訓:局部最佳的選擇(當下浪費最少)並非全域最佳。

空洞:50 KB、200 KB、120 KB。一個 100 KB 的請求檢視全部三個,挑出 120 KB 的空洞(塞得下的最小者),留下一個 20 KB 的小片——一個對下一個請求而言很可能太小而無法使用的碎片。

當下最貼合,卻製造出微小且無法使用的剩餘。

儘管名為最佳,最佳適配在實務上通常並非最佳:它比最先適配慢,並傾向把記憶體弄得到處是無法使用的小片。這個名字描述的是它所做的選擇,不是它的結果。

又称
best-fit allocation最適配