·ChinaUnix首页 ·论坛 ·博客 
Linux首页 | Linux新闻 | Linux文档 | Linux论坛 | Linux下载 | Linux博客 | Linux搜索
新手入门 | 安装启动 | 管理员指南 | 开发手册 | 桌面应用 | 程序开发 | 数据库 | 网络技术| CentOS | Fedora | MySQL | Apache | Ubuntu | Gentoo| OSCON08
  Linux时代 >> 技术文档 >> 系统管理
 
dlmalloc源码剖析之:malloc_consolidate
来源: ChinaUnix博客  日期: 2008.06.01 20:48 (共有条评论) 我要评论
 
版权声明: 本文章由vt.buxiu发布在
www.vtzone.org
,版权归vtzone研究小组所有,转载请保持此声明!!!
@@内容摘要:
       consolidate_fastbin函数用于合并fastbin中的空闲内存块,是doug lea malloc(dlmalloc)重要的函数之一。本文以dlmalloc2.7.0版本为基础,先以伪代码的形式介绍consolidate_fastbin函数的主要流程。@@


void dlmalloc_consolidate_fastbin(mstate av)
{
    //第一次进来,还没初始化,先调用malloc_init_state对bins[]进行初始化
    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; iav->max_fast; i++)
    {
        if(av->fastbin != 0)
        {
            mchunkptr p = av->fastbin; //当前正在合并的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下一个物理相邻的chunk是top
                (
                    直接与top合并,修改top指针
                )
               
            }while((p = nextp) != 0)
            
            av->fastbin = 0; //将该av->fastbin个链表清除
        }
   
    }
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8059/showart_723226.html
  发表评论 查看评论(共有条评论) 我要提问
 
 


最新资讯更多>> 
· 番茄花园事件给我们的反思
· 红帽收购Qumranet加强虚拟化领..
· Debian 下一个稳定版的代号被确..
· 发行版发布:Mandriva Linux 2..
· Sun VirtualBox v2.0 发布
· Ubuntu Linux用户突破800万
· Mandriva Linux 2009 RC 1 发布
· 构建Linux版本的谷歌Chrome浏览器
· 发行版发布:Scientific Linux..
· BSD发行版:DragonFly BSD 2.1..
论坛热点更多>> 
· 奔腾老机器16M内存,还能用什..
· 【经典】我是一条内存
· 刚接到通知
· 建议!
· 下班我们部门KTV有美女陪 o(..
· 中秋都有什么打算啊
· 誰懂裝修啊,來幫幫忙
· UNIX环境高级编程这本书怎么样?
· 真实的战争~~~~来晚的已经没..
· 《深入理解Linux网络内幕》原..
文档更新更多>> 
· 用YUM升级CentOS系统中PHP和MySQL
· [转]Red Hat Linux 安全设置指南
· 使用Emacs作为文件管理器
· linux内核的移植与遭遇问题的解决
· KStar 校园网锐捷认证GUI版
· 给eclipse安装CDT插件开发C/C++工程
· ubuntu 8.10 安装 Lotus Symphony
· fsck命令
· RHEL5的kickstart中的%packages部..
· linux 线程实现机制分析
 
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 友情链接 | 免费注册

Copyright © 2001-2008 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们