內存碎片的定義、種類、產生原因以及解決辦法

定義

內存碎片就是碎片的內存,描述一個系統中所有不可用的空閒內存。內存是空閒的但是不可用,是因爲負責動態分配內存的分配算法使得這些空閒的內存無法使用,原因在於這些個空閒內存比較小並且不連續,無法滿足內存管理算法中的申請需求。

種類及產生原因

  1. 內部碎片:因爲所有的內存分配必須起始於可被4、8或16整除(內存對齊,視處理器體系結構而定)的地址或者因爲MMU的分頁機制的限制,決定內存分配算法僅能把預定大小的內存塊分配客戶。就是分配滿足上面對齊條件的最小的內存大小,如果申請的不滿足對齊條件,勢必會多分配一點不需要的多餘內存空間,造成內部碎片。如:申請43Byte,因爲沒有合適大小的內存,會分配44Byte或48Byte,就會存在1Byte或3Byte的多餘空間。
  2. 外部碎片:頻繁的分配與回收物理頁面會導致大量的、連續且小的頁面塊夾雜在已分配的頁面中間,從而產生外部碎片。比如有一塊共有100個單位的連續空閒內存空間,範圍爲0~99,如果從中申請了一塊10 個單位的內存塊,那麼分配出來的就是0~9。這時再繼續申請一塊 5個單位的內存塊,這樣分配出來的就是 10~14。如果將第一塊釋放,此時整個內存塊只佔用了 10~14區間共 5個單位的內存塊。然後再申請20個單位的內存塊,此時只能從 15開始,分配15~24區間的內存塊,如果以後申請的內存塊都大於10個單位,那麼 0~9 區間的內存塊將不會被使用,變成外部碎片。

解決辦法

夥伴算法:https://blog.csdn.net/itworld123/article/details/104418880

 

(SAW:Game Over!)

發佈了265 篇原創文章 · 獲贊 105 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章