一、找到dmaolloc的内存内存释放的机制总结,也很容易反推出其内存分配的机制,挺好的转一下(转自:http://blog.chinaunix.net/uid-796091-id-2035309.html)
1. 不考虑TRIM_FASTBINS的影响,对于小于64个字节(FASTBIN_THRESHOLD)的内存块,free直接将释放的内存块放入fastbin,供下次malloc使用。
2. 对于使用mmap取得的内存块,即大于128k(MMAP_THRESHOLD)的内存块,直接使用munmap来释放内存,不做任何cache操作。
3. 对于大于处在64到128k之间的内存块,释放的时候和前后的chunks做合并,最后把合并所得到的chunk放入unsorted list. malloc可能会在下次分配内存的时候使用它并且同时把unsorted list里面的chunks链入normal bins.
4. 只有当free chunk的大小大于64k(FASTBIN_CONSOLIDATION_THRESHOLD),并且free chunk就是top chunk的时候,sbrk(-size)才会被调用。
http://blog.chinaunix.net/uid-796091-id-2035309.html