Malloc代码实现
dlmalloc
/*
Basic algorithm:
If a small request (< 256 bytes minusper-chunk overhead):
1. If one exists, use a remainderlesschunk in associated smallbin.
(Remainderless means that there aretoo few excess bytes to
represent as a chunk.)
2. If it is big enough, use the dvchunk, which is normally the
chunk adjacent to the one used forthe most recent small request.
3. If one exists, split the smallestavailable chunk in a bin,
saving remainder in dv.
4. If it is big enough, use the topchunk.
5. If available, get memory from system and use it ------- sys_alloc
Otherwise, for a large request:
1. Find the smallest available binnedchunk that fits, and use it
if it is better fitting than dvchunk, splitting if necessary.
2. If better fitting than any binnedchunk, use the dv chunk.
3. If it is big enough, use the topchunk.
4. If request size >= mmap threshold,try to directly mmap this chunk.
5. If available, get memory from system and use it --------sys_alloc
The ugly goto's here ensure thatpostaction occurs along all paths.
*/
dlfree
/*
Consolidatefreed chunks with preceeding or succeeding bordering
free chunks, if they exist, and then placein a bin. Intermixed
with special cases for top, dv, mmappedchunks, and usage errors.
*/