doug lea malloc源码剖析之:malloc_consolidate
来源:互联网 发布:大数据分析培训 编辑:程序博客网 时间:2024/05/22 13:44
流行分配器dlmalloc剖析之:malloc_consolidate
版权声明: 本文章由vt.buxiu发布在www.vtzone.org,版权归vtzone研究小组所有,转载请保持此声明!!!
@@内容摘要:
consolidate_fastbin函数用于合并fastbin中的空闲内存块,是doug lea malloc(dlmalloc)重要的函数之一。本文以dlmalloc2.7.0版本为基础,先以伪代码的形式介绍consolidate_fastbin函数的主要流程。@@
@@内容摘要:
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; i<av->max_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下一个物理相邻的chunk是top
(
直接与top合并,修改top指针
)
}while((p = nextp) != 0)
av->fastbin[i] = 0; //将该av->fastbin[i]个链表清除
}
}
}
...{
//第一次进来,还没初始化,先调用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; i<av->max_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下一个物理相邻的chunk是top
(
直接与top合并,修改top指针
)
}while((p = nextp) != 0)
av->fastbin[i] = 0; //将该av->fastbin[i]个链表清除
}
}
}
作者:vt.buxiu@www.vtzone.org
- doug lea malloc源码剖析之:malloc_consolidate
- doug lea malloc源码剖析之:sYSMALLOc
- Doug Lea的malloc
- Doug Lea的malloc
- Doug Lea的malloc
- Doug Lea的malloc 内存分配器(转)
- Java concurrent Framework并发容器之ConcurrentHashMap(Doug Lea 非JDK版)源码分析
- dlmalloc源码剖析之:mALLOc
- Doug Lea是谁?谁知道
- malloc源码剖析
- Doug Lea discuessed about fork/join framework
- Scalable IO in Java -Doug Lea
- 【Doug Lea系列】Java并发结构
- 【Doug Lea系列】任务取消(Cancellation)
- Doug Lea并发编程文章全部译文
- malloc的源码剖析源
- A Java Fork/Join Framework by Doug Lea
- 【Doug Lea系列】Java内存模型Cookbook-前言
- C#日期格式化 文档
- 剀利趋势线
- 转贴--java的编码
- ms赢政又挂鸟
- 如何用Asp.Net来实现“网络硬盘”功能
- doug lea malloc源码剖析之:malloc_consolidate
- DotNetTextBox V3.0 所见即所得编辑器控件Ver3.3.4 Free(免费版)
- TBDateEdit 日期控制項 - 1.0.0.0 版
- oSIP开发者手册 oSIP开发者手册
- .NET 3.5 验证码控件 John.WebControls.ValidateCode for .NET 3.5 RTM
- 《谈“80后”程序员为什么找不到工作?》《再谈“80后”程序员找不到工作》 我的看法
- .NET 3.5 日历控件 John.WebControls.Calendar for .NET 3.5 RTM
- .NET 3.5 树型控件 John.WebControls.Tree for .NET 3.5 RTM
- Visual Assist 10.4.1623.0 - Cracked.DLL - Av0id / REVENGE Crew