/*如果你使用linux, douglea malloc已经默认作为glibc的malloc,
新的版本可能用的是ptmalloc(dlmalloc的多线程版本)
如果你用的bsd4.2及以前系统libc用的kingsley的malloc;
BSD(包括freebsd,netbsd,openbsd)4.2以后版本libc用的是PHKmalloc;
如果你用的windows系统用的是microsoft的分配器算法;
不过其他各个系统很容易使用doug lea malloc替换现有的malloc*/
//c语言标准库提供的malloc函数;请注意malloc的几个return出口;
void* mALLOc(size_t bytes)
{
//0~4bytes->nb=16;>4bytes->nb=bytes+2个4字节头,然后对其到8bytes
checked_request2size(bytes, nb);
//如果在fastbin中有可用的块直接从fastbin中分配
if ((unsigned long)(nb) <= (unsigned long)(av->max_fast)) {
fb = &(av->fastbins[(fastbin_index(nb))]);
if ( (victim = *fb) != 0) { //静态变量成员fastbin初始化为0
*fb = victim->fd;
check_remalloced_chunk(victim, nb);
return chunk2mem(victim);
}
}
//如果是<512bytes的小块请求,从smallbin中取一块
if (in_smallbin_range(nb))
{
//根据nb大小定位到smallbin
idx = smallbin_index(nb);
bin = bin_at(av,idx);
//如果该大小的bin列表不为空
if ( (victim = last(bin)) != bin)
{
if (victim == 0) //静态变量成员smallbin初始化是0