malloc带有cookie,用掉8个字节。
在debug mode的情况下,会分配的大小。mDataSize真正要分配的内存大小。
gap:4个字符,如果越界就会报异常。
所有malloc分配的内存块,都被保存起来。
把刚计算出的size,如果比_sbh_threadhold(1016,这个没有加cookie)小,用_Sbh_alloc_block。
malloc的cookie机制
在malloc为用户分配内存的时候,除了分配用户本身的内存,还会在内存前后加上两个cookie,来记录分配了多少内存,这样在调用free函数的时候才能准确的回收内存。因此每次调用malloc函数都会产生cookie消耗。
会调整为16的倍数。用最后一位是0,在操作系统,1被使用。
一个header负责管理1Mb的内存。
每个page都是4k
0xffffff,设置-1,回收时,用-1作为分割器。第一块记录大小。
最后一条链表,管理大于1K。如果小于1K,计算用哪个链表。
上面是内存的划分给到申请者。
64个链表是16个字节,按16个字节递增。
上面是回收,检查cookie的最后一位是否是0,如果是0,可以合并。表明了上下cookie的作用。