c++内存管理-VC6
malloc帶有cookie,用掉8個字節(jié)。
在debug mode的情況下,會分配的大小。mDataSize真正要分配的內(nèi)存大小。
gap:4個字符,如果越界就會報異常。
所有malloc分配的內(nèi)存塊,都被保存起來。
把剛計算出的size,如果比_sbh_threadhold(1016,這個沒有加cookie)小,用_Sbh_alloc_block。
malloc的cookie機(jī)制
在malloc為用戶分配內(nèi)存的時候,除了分配用戶本身的內(nèi)存,還會在內(nèi)存前后加上兩個cookie,來記錄分配了多少內(nèi)存,這樣在調(diào)用free函數(shù)的時候才能準(zhǔn)確的回收內(nèi)存。因此每次調(diào)用malloc函數(shù)都會產(chǎn)生cookie消耗。
會調(diào)整為16的倍數(shù)。用最后一位是0,在操作系統(tǒng),1被使用。
一個header負(fù)責(zé)管理1Mb的內(nèi)存。
每個page都是4k
0xffffff,設(shè)置-1,回收時,用-1作為分割器。第一塊記錄大小。
最后一條鏈表,管理大于1K。如果小于1K,計算用哪個鏈表。
上面是內(nèi)存的劃分給到申請者。
64個鏈表是16個字節(jié),按16個字節(jié)遞增。
上面是回收,檢查cookie的最后一位是否是0,如果是0,可以合并。表明了上下cookie的作用。
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的c++内存管理-VC6的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++内存管理-分配失败
- 下一篇: c++-内存管理-BC5