看《程序員的自我修養》這本書(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的實現細節是不一樣的