Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192605
  • 博文数量: 73
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1160
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-23 15:53
文章分类

全部博文(73)

文章存档

2011年(1)

2009年(72)

我的朋友

分类: LINUX

2009-04-23 16:45:38

dlmalloc剖析之:malloc_consolidate

版权声明: 本文章由vt.buxiu发布在,版权归vtzone研究小组所有,转载请保持此声明!!!

@@
内容摘要:
       consolidate_fastbin
函数用于合并fastbin中的空闲内存块,是doug lea malloc(dlmalloc)重要的函数之一。本文以dlmalloc2.7.0版本为基础,先以伪代码的形式介绍 consolidate_fastbin函数的主要流程。@@

void dlmalloc_consolidate_fastbin(mstate av)
...{
    
//
第一次进来,还没初始化,先调用malloc_init_statebins[]进行初始化
    if(av->max_fast == 0)
    
...{
        malloc_init_state(av); 
//初始化av
        return;
    }
    
    
//获得unsorted_bin指针,unsorted_bin是作为队列维护,LRU顺序,首地址固定放在av->bins[0]
    unsorted_bin = unsorted_chunks(av); 
    
    
for(usigned int i = 0; imax_fast; i++)
    
...{
        
if(av->fastbin[i] != 0)
        
...{
            mchunkptr p = av->fastbin[i]; 
//当前正在合并的chunk
            mchunkptr nextp = p->fd;      //当前正在合并的chunk的下一个chunk,控制循环使用
            do...{
                
                
if(p的前一个物理相邻chunk是空闲)
                    p
与前一个chunk合并;
                
if(nextchunk != av->top) //p下一个物理相邻的chunk不是top
                ...{
                    
if(nextchunk 是空闲)
                    
...{
                        p
nextchunk合并;
                        
nextchunk从原来链表中删除;(原来链表可能在其他bin)
                    }
                    
                    
//注意这里!!!
                    //
只要p下一个物理相邻的chunk不是top,程序流程都会走到这里
                    //unsorted_bin->first_unsorted->second_unsorted->.....->last_unsorted
                    //                     /
                    //                      | 
在这里插入
                    
                    
LRU顺序将p插入到unsorted-freelist
                }
                
else //p下一个物理相邻的chunktop
                (
                    
直接与top合并,修改top指针
                )
                
            }
while((p = nextp) != 0)
            
            av->fastbin[i] = 0;           
//将该av->fastbin[i]个链表清除
        }
    
    }

}


作者:

 

 

阅读(757) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~