內存空間分配

歡迎關注我的博客Zhuhao's Blog獲取最新文章

glibc的malloc實現(xiàn),會按照分配內存大小的不同而使用不用的方法,小空間的分配會直接使用堆,大空間的分配使用的就是匿名內存映射。(目前是以128KB的空間為大小的界限)

堆實現(xiàn)

簡單的說,就是把數(shù)據段切分為一系列2的整數(shù)冪大小的塊,然后相鄰的分區(qū),哪里有位置,就使用哪里的內存;不用了就標記一個"不使用"。一般堆的頂端都有一個端點,如果當前堆頂是空的,可以調用 brk(),降低斷點的位置,將空間返還給系統(tǒng)。

我理解的內部碎片和外部碎片

堆實現(xiàn)的這個"伙伴內存分配算法",雖然高速簡單,但是會產生"內部碎片"和"外部碎片"。內部碎片降低空間的利用率。外部碎片則是有內存空間卻由于被分成不同塊而無法使用。

內存映射實現(xiàn)

匿名內存映射和基于文件的映射很像,匿名內存映射使用 mmap() 時,start 參數(shù)使用NULL,也就是說不管映射在什么地方,所以叫匿名。

使用匿名內存映射后,媽媽再也不用擔心我的內存碎片問題了,不用直接取消映射就好,想用再映射回來。但是凡事有優(yōu)點就有缺點,每個內存映射都是頁的大小的整數(shù)倍,也就是說,需要分配的空間越小,對空間的浪費就越多;所以只有在對大量空間分配時才使用內存映射。

參考源

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容