·ChinaUnix首页 ·论坛 ·博客 
Linux首页 | Linux新闻 | Linux文档 | Linux论坛 | Linux下载 | Linux博客 | Linux搜索
新手入门 | 安装启动 | 管理员指南 | 开发手册 | 桌面应用 | 程序开发 | 数据库 | 网络技术| CentOS | Fedora | MySQL | Apache | Ubuntu | Gentoo| OSCON08
  Linux时代 >> 技术文档 >> 系统管理
 
dlmalloc源码剖析之:sYSTRIm
来源: ChinaUnix博客  日期: 2008.06.01 20:45 (共有条评论) 我要评论
 

dlmalloc源码剖析之:sYSTRIm
版权声明: 本文章由vt.buxiu发布在
www.vtzone.org
,版权归vtzone研究小组所有,转载请保持此声明!!!
@@内容摘要:
       sYSTRIm函数用于合并fastbin中的空闲内存块,是doug lea malloc(dlmalloc)重要的函数之一。本文以dlmalloc2.7.0版本为基础,先以伪代码的形式介绍sYSTRIm函数的主要流程。@@

/*
   传递负参数调用sbrk,将top不用的内存归还OS。通过free()自动调用
   也可由附加功能函数malloc_trim调用
*/
static int sYSTRIm(size_t pad, mstate av)
{
//计算多余的内存,至少保留一页不释放
   extra = ((top_size - pad - MINSIZE + (pagesz-1)) / pagesz - 1) * pagesz;
  
if (extra > 0) {//有多余的内存才释放
  //获得当前heap顶部地址
  current_brk = (char*)(MORECORE(0));
  
  //只有top尾部是以前自己调用sbrk扩展的时候才进行trim,避免其他进程调用sbrk发生问
     //也就是说如果top目前是mmap获得的,不会进行trim;
     //如果当前的top与以前的top之间不连续,只会trim当前的top,以前的top没法释放了
     if (current_brk == (char*)(av->top) + top_size) {
      //释放内存给OS
      MORECORE(-extra);
      //获得新的heap顶部地址
        new_brk = (char*)(MORECORE(0));
        
        released = (long)(current_brk - new_brk);//实际释放了这么多内存
        if (released != 0) {
            //根据实际释放的内存,调整top指针
            av->sbrked_mem -= released;
            set_head(av->top, (top_size - released) | PREV_INUSE);
            check_malloc_state();
            return 1;
         }
     }
}
//release nothing
return 0;
}


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


最新资讯更多>> 
· MagicLinux 项目团队公布 Magi..
· 关于GPL和BSD的讨论
· 开源:借手机平台扶摇直上?
· 消息称MySQL创始人已向Sun提交..
· Ubuntu 8.10 Alpha 5放出 运行..
· 9月10 日北邮嵌入式&Linux..
· 让古董机发挥余热的一个技术建议
· Fluxbox 1.1.0 发布
· 开源领域 LinuxWorld China 20..
· Linux下五个好用的HTML编缉器
论坛热点更多>> 
· 高性能MySQL数据库系统(第二..
· 【经典】我是一条内存
· 真实的战争~~~~来晚的真的别..
· UNIX环境高级编程这本书怎么样?
· 刚接到通知
· 中秋都有什么打算啊
· 下班我们部门KTV有美女陪 o(..
· 今天朋友打电话来说被人泼水了
· 誰懂裝修啊,來幫幫忙
· [这姐俩有暴力倾向]谁?谁?
文档更新更多>> 
· 用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的朋友们