主記憶體:配置、連結與分段
內部碎裂(internal fragmentation)
想像買蛋只能整打買。你需要 10 顆蛋,卻必須買 12 顆,於是有 2 顆閒置在蛋盒裡。就店家而言這盒是滿的——你無法把那 2 個格子退回去——但你買下的東西裡面浪費了 2 顆蛋份的空間。內部碎裂正是如此:被浪費在已配置區塊裡面的記憶體,因為區塊比實際需要的更大。
具體來說,每當記憶體以固定大小的單位發放時,內部碎裂就會出現。採用固定大小分割時,一個放進 8 KB 槽的 4 KB 行程浪費了另外 4 KB——那段閒置屬於該行程,別人無法使用。分頁也發生同樣的事:記憶體一次發出一整頁(一個頁框),所以一個行程的最後一頁通常只用到一部分。一個需要 10 KB、頁大小 4 KB 的行程佔三頁(12 KB),在它最後一頁浪費 2 KB。浪費被封在配置裡面——故稱為內部。
為什麼重要:內部碎裂是「以區塊而非以位元組」發放的代價。它是外部碎裂的反面:外部的浪費在區塊之間(散落而無法使用的空洞),內部的浪費在區塊裡面(你被算錢卻無法使用的閒置)。分頁以接受內部碎裂為代價換掉外部碎裂——平均每個行程約半頁——這通常是非常划算的交易。
頁大小 4 KB。一個行程需要 10 KB,所以它拿到 3 頁=12 KB。前兩頁是滿的;第三頁只裝了 2 KB 有用資料和 2 KB 別人無法碰觸的內部碎裂。
最後一頁裡面的閒置就是內部碎裂。
較小的頁減少內部碎裂,但會增大分頁表並增加額外負擔;較大的頁則相反。頁大小是刻意的取捨,而非免費的好處,而內部碎裂就是它的代價那一端。
又称
另见