主要區別
內部碎片和外部碎片之間的主要區別在於,內部碎片是分配的記憶體塊之間未使用的儲存空間,而外部碎片是相鄰塊之間非常小的用於服務請求的孔。
內部碎片(internal fragmentation) vs. 外部碎片(external fragmentation)
內部碎片是一種碎片型別,當分配給程式的記憶體比所需的記憶體大時會發生這種情況。在這裡,自由空間被稱為內部碎片。另一方面,外部碎片是在非傳染性記憶塊之間形成的一種自由空間。
內部碎片化的原因是記憶體被分成固定大小的塊。另一方面,外部碎片是指記憶體根據不同程序的大小被劃分為大小可變的塊時發生的過程。
內部碎片問題可以透過將記憶體分配給記憶體塊的動態部分中的程式來解決,並在程式執行過程中不需要記憶體時釋放記憶體。另一方面,外部碎片可以透過分頁、壓縮和分段來解決,這樣就可以以非連續的方式將記憶體分配給程式。
比較圖
什麼是內部碎片(internal fragmentation)?
內部碎片是一種碎片型別,當分配給程式的記憶體比所需的記憶體大時會發生這種情況。當記憶體被分配到固定大小的塊中時,就會發生這種情況。
每當程式需要記憶體時,系統都會分配固定大小的塊。如果分配給程式的記憶體比所請求的記憶體更大,則稱為記憶體碎片。固定大小塊內的這個空間不能分配給任何程式,因為它不足以儲存新程式。
內部碎片問題可以透過將記憶體劃分為可變大小的塊並將最佳大小的塊分配給需要記憶體的程式來解決。它不能完全解決內部分裂問題,但會在一定程度上減輕內部分裂。
例子
這是一個內部碎片化的例子。記憶體空間被分成固定大小為18470位元組的塊。但是,一個程式需要18460位元組。系統將為其分配固定大小的分割槽塊,即18470位元組。因此,18470位元組的10個位元組將保持為空,這是內部碎片的來源。
什麼是外部碎片(external fragmentation)?
外部碎片(External fragmentation)是指在非傳染性記憶體或儲存碎片之間出現的洞或未使用的空間,它太短而無法儲存新的程式。當系統的儲存記憶體中有足夠的可用空間來滿足程式的記憶體需求時,就發生了這種情況。但是,由於系統的可用記憶體是非相鄰的,因此對程式的需求無法實現或滿足。
無論是應用第一適合的記憶體分配策略還是最適合的記憶體分配策略,這都將是外部碎片化的原因。當一個程式被載入並從記憶體中刪除時,會留下造成漏洞的可用空間。記憶體空間中有大量這樣的洞,導致外部碎片。
第一擬合和最佳擬合記憶體分配策略可以減少外部碎片的數量,但不能完全消除。分頁、壓縮和分段可以解決外部碎片問題。
壓縮算**將記憶體的所有內容移到一邊並釋放大量記憶體塊。但這是一個昂貴的程式。解決此問題的另一種解決方案是允許程序以非連續的方式獲得實體記憶體。這個解決方案可以透過使用分頁和分段過程來實現。
例子
在計算機系統中,當程式請求空間時,塊以塊的形式分配。假設為了在系統中儲存資訊和資料,有一塊記憶體是空的。現在,有一個程式,我們想儲存在記憶體中。程式將動態地儲存在記憶體中,也就是說,隨機地,在任何它感覺舒服或發現空間的地方。當下一個程式需要儲存時,它會在記憶體空間中進行相應的調整。現在,我們從系統中刪除一個程式。它會在記憶體中留下空間或漏洞。此孔或空間不能與其他儲存器一起使用,即使它位於空閒記憶體旁邊並導致外部碎片的形成。
主要區別
- 程式所需記憶體與分配給程式的記憶體之間的差異稱為內部碎片,而非傳染性記憶體碎片之間出現的洞或未使用的空間太短而無法儲存新程式,則稱為外部碎片。
- 內部碎片是指分配區域中塊之間未使用的空間,另一方面,外部碎片是指由於太短而無法儲存請求而保持未使用的空間。
- 內部碎片化的原因是記憶體被分成固定大小的塊。相反地,當記憶體或儲存器根據不同程式的大小被組合或劃分為大小可變的塊時,就會發生外部碎片。
- 當分配給程式的空間超過所需空間時,就會發生內部碎片。另一方面,當程式從記憶體中刪除時,會在系統儲存中留下導致外部碎片的可用空間時,就會出現外部碎片。
- 內部碎片問題可以透過將記憶體分配給記憶體塊的動態部分中的程式來解決,並在程式執行過程中不需要記憶體時釋放記憶體。另一方面,外部碎片可以透過分頁、壓縮和分段來解決,這樣就可以以非連續的方式將記憶體分配給程式。
對比影片
結論
以上討論總結了計算機儲存中造成儲存空間浪費的兩個過程:內部碎片化和外部碎片化。當分配給程式的空間超過所需的空間時,就會發生內部碎片;而當程式從記憶體中刪除後留下可用空間時,就會出現外部碎片。