内存分配器dlmalloc 2.8.3源码浅析

内存分配器dlmalloc 2.8.3源码浅析

ID:1547642

大小:458.50 KB

页数:51页

时间:2017-11-12

内存分配器dlmalloc 2.8.3源码浅析_第1页
内存分配器dlmalloc 2.8.3源码浅析_第2页
内存分配器dlmalloc 2.8.3源码浅析_第3页
内存分配器dlmalloc 2.8.3源码浅析_第4页
内存分配器dlmalloc 2.8.3源码浅析_第5页
内存分配器dlmalloc 2.8.3源码浅析_第6页
内存分配器dlmalloc 2.8.3源码浅析_第7页
内存分配器dlmalloc 2.8.3源码浅析_第8页
内存分配器dlmalloc 2.8.3源码浅析_第9页
内存分配器dlmalloc 2.8.3源码浅析_第10页
资源描述:

《内存分配器dlmalloc 2.8.3源码浅析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、目录1.本文档介绍12.边界标记法23.分箱式内存管理64.核心结构体MALLOC_STATE135.内存分配相关函数165.1函数dlmalloc165.2函数tmalloc_small255.3函数tmalloc_large275.4函数sys_alloc325.5函数mmap_alloc396.内存回收相关函数426.1函数dlfree426.2函数sys_trim477.本文档声明50内存分配器dlmalloc2.8.3源码浅析1.本文档介绍dlmalloc是目前一个十分流行的内存分配器,其由DougLea个人主页为http://gee.cs.

2、oswego.edu/从1987年开始编写,到目前为止,最新版本为2.8.3可以从ftp://g.oswego.edu/pub/misc/malloc.c获取该源文件,由于其高效率等特点被广泛的使用和研究(很多linux系统等用的就是dlmalloc或其变形,比如ptmalloc主页为http://www.malloc.de/en/index.html)。dlmalloc的实现只有一个源文件(还有一个头文件),大概5000行,其内注释占了大量篇幅,由于有这么多注释存在的情况下,表面上看上去很容易懂,的确如此,在不追求细节的情况,对其大致思想的确很容易了

3、解(没错,就只是了解而已),但是dlmalloc作为一个高品质的佳作,实现上使用了非常多的技巧,在实现细节上不花费一定的精力是没有办法深入理解其为什么这么做,这么做的好处在哪,只有当真正读懂后回味起来才发现它是如此美妙。lenky0401个人博客http://lenky0401.cublog.cn将陆续推出关于dlmalloc源码(针对DougLeaMalloc的最新版Version2.8.3)的初步解析文章,由于lenky0401水平有限,因此也不能完全保证对dlmalloc的所有理解都准备无误,但是所有内容均出自个人的理解而并非存心妄自揣测来愚人耳

4、目,所以如果读者发现其中有什么错误,请勿见怪,如果可以则请来信告之,并欢迎来信讨论(lenky0401@163.com)。本文档描述的内容不会包含dlmalloc全部代码,但会将这其中涉及到的一些技巧尽量讲出,我相信对dlmalloc源代码不感兴趣的朋友也可以学到这些独立的技巧而使用在自己的编程实践中。另外,本文档对dlmalloc的描述过程中忽略了很多细节(主要是环境和自定义设置)的反复核认,一致约定在未做说明的情况下就以32位平台、8字节对齐、Ubuntu-8.10操作系统作为参考环境设置考虑。 第50页我心永恒爱无止境内存分配器dlmalloc2

5、.8.3源码浅析2.边界标记法dlmalloc采用所谓的边界标记法将内存划分成很多块,从而对内存的分配与回收进行管理。在dlmalloc的实现源码中定义了两种结构体malloc_chunk和malloc_tree_chunk来描述这些块,小于256字节的chunk块由结构体malloc_chunk来描述,大于256字节的chunk块由结构体malloc_tree_chunk来管理。结构体malloc_chunk和malloc_tree_chunk的定义如下:structmalloc_chunk{size_tprev_foot;/*Sizeofprevi

6、ouschunk(iffree).*/size_thead;/*Sizeandinusebits.*/structmalloc_chunk*fd;/*doublelinks--usedonlyiffree.*/structmalloc_chunk*bk;};typedefstructmalloc_chunkmchunk;typedefstructmalloc_chunk*mchunkptr;typedefstructmalloc_chunk*sbinptr;/*Thetypeofbinsofchunks*/ structmalloc_tree_chun

7、k{/*Thefirstfourfieldsmustbecompatiblewithmalloc_chunk*/size_tprev_foot;size_thead;structmalloc_tree_chunk*fd;structmalloc_tree_chunk*bk; structmalloc_tree_chunk*child[2];structmalloc_tree_chunk*parent;bindex_tindex;}; 从它们的定义中可以看到结构体malloc_tree_chunk除了比malloc_chunk多三个字段以外,前四个字段和

8、malloc_chunk完全一样。我们先来看看只考虑使用结构体malloc_chunk管理(结

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。