首页 > *nix技术, 内存管理, 源码分析 > dlmalloc解析连载完整word文档

dlmalloc解析连载完整word文档

2011年11月15日 发表评论 阅读评论 8,396 次浏览

把cu个人博客的这篇文章转载过来,呵呵。
目 录
1. 本文档介绍
2.边界标记法
3. 分箱式内存管理
4. 核心结构体malloc_state
5. 内存分配相关函数
5.1 函数dlmalloc
5.2 函数tmalloc_small
5.3 函数tmalloc_large
5.4 函数sys_alloc
5.5 函数mmap_alloc
6. 内存回收相关函数
6.1 函数dlfree
6.2 函数sys_trim
7. 本文档声明

1. 本文档介绍
dlmalloc是目前一个十分流行的内存分配器,其由Doug Lea[1]从1987年开始编写,到目前为止,最新版本为2.8.3[2],由于其高效率等特点被广泛的使用和研究(很多linux系统等用的就是dlmalloc或其变形,比如ptmalloc[3])。
dlmalloc的实现只有一个源文件(还有一个头文件),大概5000行,其内注释占了大量篇幅,由于有这么多注释存在的情况下,表面上看上去很容易懂,的确如此,在不追求细节的情况,对其大致思想的确很容易了解(没错,就只是了解而已),但是dlmalloc作为一个高品质的佳作,实现上使用了非常多的技巧,在实现细节上不花费一定的精力是没有办法深入理解其为什么这么做,这么做的好处在哪,只有当真正读懂后回味起来才发现它是如此美妙。
lenky0401个人博客[4]将陆续推出关于dlmalloc源码(针对Doug Lea Malloc的最新版Version 2.8.3)的初步解析文章,由于lenky0401水平有限,因此也不能完全保证对dlmalloc的所有理解都准备无误,但是所有内容均出自个人的理解而并非存心妄自揣测来愚人耳目,所以如果读者发现其中有什么错误,请勿见怪,如果可以则请来信告之,并欢迎来信讨论(lenky0401@163.com)。
本文档描述的内容不会包含dlmalloc全部代码,但会将这其中涉及到的一些技巧尽量讲出,我相信对dlmalloc源代码不感兴趣的朋友也可以学到这些独立的技巧而使用在自己的编程实践中。另外,本文档对dlmalloc的描述过程中忽略了很多细节(主要是环境和自定义设置)的反复核认,一致约定在未做说明的情况下就以32位平台、8字节对齐、Ubuntu-8.10操作系统作为参考环境设置考虑。

[1] 个人主页为http://gee.cs.oswego.edu/
[2] 可以从ftp://g.oswego.edu/pub/misc/malloc.c获取该源文件
[3] 主页为http://www.malloc.de/en/index.html
[4] http://lenky0401.cublog.cn

word文档下载:dlmalloc解析连载完整word文档

转载请保留地址:http://www.lenky.info/archives/2011/11/164http://lenky.info/?p=164


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. aiseeker
    2013年4月24日14:17 | #1

    初步拜读了你的这篇大作,很是佩服。有个问题请教下:
    “dlmalloc维护了32个双向环形链表”—- 那初始状态时,每个链表里都有了事先分配好的空闲块?如果是这样,每箱初始化多少个空闲chunk呢?又是啥时候来做这个初始化工作呢?
    谢谢!

  2. czbe
    2012年2月8日10:08 | #2

    @lenky
    因为微软自己也实现的有free、malloc等函数,不知道怎么把它的替换掉

  3. lenky
    2012年2月8日06:19 | #3

    @czbe
    额,这个不清楚,没用过你说的那一套编译环境。既然提示重定义,那么可以试着查一下在哪几个地方重复定义了,把多余的去掉。linux我倒熟,有nm等命令可以查看二进制对象里定义的符号。

  4. czbe
    2012年2月8日05:52 | #4

    你好,看了你的文章,我下载了最新的的dlmalloc2.8.5来试用,在vs2005中直接把malloc.c和malloc.h加入project,编译,在wince中使用,遇到了若干问题,最后还有两个问题无法解决:1.free重定义:错误 42 error LNK2005: free 已经在 malloc-2.8.5.obj 中定义 corelibc.lib,不知该怎么解决?

  5. lenky
    2011年11月15日11:49 | #5

    @Claud
    晕,你太快了,我还在编辑中。

  6. 2011年11月15日11:45 | #6

    从主页下载附件,404了。进来以后下载没问题。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.