malloc探索小步

看《程序員的自我修養》這本書(P307),知道malloc是先從堆(默認1MB)申請空間,不夠再調用mmap()申請虛擬空間。

但在做PAT DS 3-05時,出現超出預期的空間申請量。

最後去測試malloc,我連續malloc(1)並輸出空間起始地址,發現相鄰的空間,地址仍然相差32字節。測試了maloc(12),malloc(16)和malloc(24),得到的相鄰地址值仍然相差32字節。

我的是64位機,用的ubuntu12.04(kernel 3.5) + gcc 4.6.3。

估計32位機malloc的地址對齊是16字節

注意填充部分也算在程序消耗內存裏的。

windows下沒有測試。


之後一直在想爲何64位機malloc最少申請32字節空間。想起了堆分配算法或許用的位圖或對象池,一次分配固定大小,會產生這樣的碎片。


補充:在64位的freebsd上卻不是這樣,看來malloc的實現細節是不一樣的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章