linux內存碎片的概念


一般在內核術語中的“碎片”都是基於物理內存而言的,我沒有太看懂你得出碎片是針對地址空間這個結論的邏輯。但我認為,既然你知道了malloc是用戶空間調用的,那么你所謂的碎片也是從用戶空間的視角而言的,但對於用戶空間,看到的只有地址空間,其訪問的所有地址都是要經過頁表的轉換后才訪問的物理頁面,而且malloc分配的地址空間一定的連續的,那么這個所謂的碎片對於用戶空間也就沒有任何意義了。不知道你糾結的這個“碎片”在你心目中到底是什么意義,另外,你說的“如果地址空間都不連續就更談不上物理空間連續”,這個邏輯也是有問題的,地址空間和物理空間沒有這種所謂的聯系。物理空間連不連續,是內核在管理物理內存的時候要考慮的,跟用戶空間完全沒有關系,在用戶態的視角,只看到地址空間就足夠了。

 

我的意思不是強調虛擬地址的連續性和物理地址連續性的關系,而是說在堆里面,如果不存在一塊能夠滿足用戶malloc要求的連續地址,那么malloc就會失敗,就更談不上去獲取一塊連續的物理內存了。我的觀點malloc中的碎片是基於虛擬內存就是基於這一點的。。。

> 如果不存在一塊能夠滿足用戶malloc要求的連續地址,那么malloc就會失敗,

這句話沒問題。

> 就更談不上去獲取一塊連續的物理內存了。

這個“就更談不上”的連詞有問題,因為后者跟前者之間沒有任何關系,這種表述就有問題了,你的
言下之意就是:如果malloc成功了,那么,就可能談得上去獲取一塊連續的物理內存了。這種說法是有問題的,你還是沒有理解用戶態跟連續物理內存間沒有關系的意義。即使用戶態分配的連續地址空間,經過缺頁異常后獲取的物理頁面恰好是連續的,這也是沒有談論的意義的,物理地址連不連續對用戶空間沒有任何影響,也不是用戶空間可以左右的。

 

個人認為沒必要把碎片這個詞明確界定到是物理地址空間還是虛擬地址空間。提到內存碎片,主要考慮的是兩個方面:
1,內存碎片不能有效利用而被直接或間接的浪費。
2,內存碎片破壞了局部性原理,導致性能的降低。
這些應該都是針對物理內存來說的。很少有說因為“地址空間碎片”不夠導致內存申請失敗,相比地址空間,物理內存更緊缺,提到內存碎片當然是指物理內存。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM