一般不會處理,在現代計算機中記憶體管理使用了基於虛擬記憶體的分段和分頁機制,每一個程序看到的是4G(32位)或64TB(64位)的虛擬記憶體地址空間,一般情況下程式是用不完的。分頁機制保證僅當程式需要儲存修改資料的時候才會在真實的物理記憶體上獲取多個4KB大小的不連續的頁,且被初始化為全零,這些頁作為虛擬記憶體上的對映,使用一個malloc,作業系統會在程序的虛擬記憶體分配表上標記那塊區域已被使用,程式修改資料的時候才會在物理記憶體中開闢空間獲取多個不連續的頁,使用free,作業系統會刪除記憶體分配表的記錄,同時回收物理記憶體上的頁。使用malloc和free雖然會導致虛擬記憶體上碎片,但在物理記憶體上是不連續使用的,不會導致碎片。在普通計算機上如果虛擬記憶體碎片太多無法分配,一般作業系統會告訴你程序無響應,重新開啟程式即可,一般64TB空間不會出現這種情況;長時間執行的作業系統可能會有這種情況,此時重啟即可。在伺服器上,或持久執行的作業系統如核電站上,編譯器一般採用控制代碼池的方法,即二次指標,以64位機為例,malloc獲取指向控制代碼池的一個元素的指標p,p指向指標p1,p1才指向malloc獲取的地址,當記憶體碎片到一定程度時,作業系統會將記憶體中物件向一段移動從而壓縮碎片,這時只需要修改控制代碼池中的p1即可;但這樣效率太低,只有追求高可靠執行的系統才會使用。碎片只會在虛擬記憶體中產生,是不會對映到物理記憶體上的。
一般不會處理,在現代計算機中記憶體管理使用了基於虛擬記憶體的分段和分頁機制,每一個程序看到的是4G(32位)或64TB(64位)的虛擬記憶體地址空間,一般情況下程式是用不完的。分頁機制保證僅當程式需要儲存修改資料的時候才會在真實的物理記憶體上獲取多個4KB大小的不連續的頁,且被初始化為全零,這些頁作為虛擬記憶體上的對映,使用一個malloc,作業系統會在程序的虛擬記憶體分配表上標記那塊區域已被使用,程式修改資料的時候才會在物理記憶體中開闢空間獲取多個不連續的頁,使用free,作業系統會刪除記憶體分配表的記錄,同時回收物理記憶體上的頁。使用malloc和free雖然會導致虛擬記憶體上碎片,但在物理記憶體上是不連續使用的,不會導致碎片。在普通計算機上如果虛擬記憶體碎片太多無法分配,一般作業系統會告訴你程序無響應,重新開啟程式即可,一般64TB空間不會出現這種情況;長時間執行的作業系統可能會有這種情況,此時重啟即可。在伺服器上,或持久執行的作業系統如核電站上,編譯器一般採用控制代碼池的方法,即二次指標,以64位機為例,malloc獲取指向控制代碼池的一個元素的指標p,p指向指標p1,p1才指向malloc獲取的地址,當記憶體碎片到一定程度時,作業系統會將記憶體中物件向一段移動從而壓縮碎片,這時只需要修改控制代碼池中的p1即可;但這樣效率太低,只有追求高可靠執行的系統才會使用。碎片只會在虛擬記憶體中產生,是不會對映到物理記憶體上的。