作業系統進行連續記憶體分配時,常常會出現不能被使用者使用的小片區記憶體,這就是所謂的記憶體碎片。記憶體碎片可以分為外部碎片和內部碎片,下面來解釋一下。
所謂內部碎片,是指內部碎片就是已經被分配出去(能明確指出屬於哪個程序)卻不能被利用的記憶體空間。內部碎片產生的原因在於因為分配的記憶體起始位址必須可被 4、8 或 16 整除,如申請7位元組空間,可能會獲得8或16位元組空間,實際上多餘的空間是不可使用的。
頻繁的分配與**物理頁面會導致大量的、連續且小的頁面塊夾雜在已分配的頁面中間,就會產生外部碎片。假設有一塊一共有100個單位的連續空閒記憶體空間,範圍是0~99。如果你從中申請一塊記憶體,如10個單位,那麼申請出來的記憶體塊就為0~9區間。這時候你繼續申請一塊記憶體,比如說5個單位大,第二塊得到的記憶體塊就應該為10~14區間。如果你把第一塊記憶體塊釋放,然後再申請一塊大於10個單位的記憶體塊,比如說20個單位。因為剛被釋放的記憶體塊不能滿足新的請求,所以只能從15開始分配出20個單位的記憶體塊。現在整個記憶體空間的狀態是0~9空閒,10也就是說曾經被使用過的記憶體位址在二次使用時由於容量不滿足新的空間要求,可能會被永久廢棄。~14被占用,15~34被占用,25~99空閒。其中0~9就是乙個記憶體碎片了。如果10~14一直被占用,而以後申請的空間都大於10個單位,那麼0~9就永遠用不上了,變成外部碎片。
少用動態記憶體分配的函式(盡量使用棧空間)
分配記憶體和釋放的記憶體盡量在同乙個函式中
盡量一次性申請較大的記憶體,而不要反覆申請小記憶體(少進行記憶體的分割)
自己進行記憶體管理工作,設計記憶體池
記憶體碎片產生原因
以下是正文 記憶體碎片通常分為內部碎片和外部碎片 1.內部碎片是由於採用固定大小的記憶體分割槽,當乙個程序不能完全使用分給它的固定記憶體區域時就產生了內部碎片,通常內部碎片難以完全避免 2.外部碎片是由於某些未分配的連續記憶體區域太小,以至於不能滿足任意程序的記憶體分配請求,從而不能被程序利用的記憶...
記憶體碎片產生的原因
malloc和free大量使用後回造成記憶體碎片,那麼這種碎片形成的機理是什麼?如果機理是申請的記憶體空間大小 太小 所形成的,那麼申請多大的區域能夠最大限度的避免記憶體碎片呢 這裡的避免不是絕對的避免,只是一種概率 記憶體碎片一般是由於空閒的連續空間比要申請的空間小,導致這些小記憶體塊不能被利用....
malloc free記憶體碎片的產生原因
malloc和free大量使用後回造成記憶體碎片,那麼這種碎片形成的機理是什麼?如果機理是申請的記憶體空間大小 太小 所形成的,那麼申請多大的區域能夠最大限度的避免記憶體碎片呢 這裡的避免不是絕對的避免,只是一種概率 記憶體碎片一般是由於空閒的連續空間比要申請的空間小,導致這些小記憶體塊不能被利用....