- 1、本文档共51页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.内存分配相关函数
目 录
1. 本文档介绍 1
2.边界标记法 2
3. 分箱式内存管理 6
4. 核心结构体malloc_state 13
5. 内存分配相关函数 16
5.1 函数dlmalloc 16
5.2 函数tmalloc_small 25
5.3 函数tmalloc_large 27
5.4 函数sys_alloc 32
5.5 函数mmap_alloc 39
6. 内存回收相关函数 42
6.1 函数dlfree 42
6.2 函数sys_trim 47
7. 本文档声明 50
1. 本文档介绍
dlmalloc是目前一个十分流行的内存分配器,其由Doug Lea从1987年开始编写,到目前为止,必威体育精装版版本为2.8.3,由于其高效率等特点被广泛的使用和研究(linux系统等用的就是dlmalloc或其变形,比如ptmalloc。dlmalloc的实现只有一个源文件(还有一个头文件),大概5000行,其内注释占了大量篇幅,由于有这么多注释存在的情况下,表面上看上去很容易懂,的确如此,在不追求细节的情况,对其大致思想的确很容易了解(没错,就只是了解而已),但是dlmalloc作为一个高品质的佳作,实现上使用了非常多的技巧,在实现细节上不花费一定的精力是没有办法深入理解其为什么这么做,这么做的好处在哪,只有当真正读懂后回味起来才发现它是如此美妙。
lenky0401个人博客将陆续推出dlmalloc源码(针对Doug Lea Malloc的必威体育精装版版Version 2.8.3)的解析,由于lenky0401水平有限,因此也不能完全保证对dlmalloc的所有理解都准备无误但是所有内容均出自个人的理解而并非存心妄自揣测来愚人耳目,所以如果读者发现其中有什么错误,请勿见怪,如果可以则请来信告之,并欢迎来信讨论(lenky0401@163.com)。
描述的内容不会包含dlmalloc全部代码但会将这其中涉及到的一些技巧尽量讲出,我相信对dlmalloc源代码不感兴趣的朋友也可以学到这些独立的技巧而使用在自己的编程实践中。Ubuntu-8.10操作系统作为参考环境设置考虑。
?
2.边界标记法
dlmalloc采用所谓的边界标记法将内存划分成很多块,从而对内存的分配与回收进行管理。在dlmalloc的实现源码中定义了两种结构体malloc_chunk和malloc_tree_chunk来描述这些块,小于256字节的chunk块由结构体malloc_chunk来描述,大于256字节的chunk块由结构体malloc_tree_chunk来管理。
结构体malloc_chunk和malloc_tree_chunk的定义如下:
struct malloc_chunk {
size_t prev_foot; /* Size of previous chunk (if free). */
size_t head; /* Size and inuse bits. */
struct malloc_chunk* fd; /* double links -- used only if free. */
struct malloc_chunk* bk;
};
typedef struct malloc_chunk mchunk;
typedef struct malloc_chunk* mchunkptr;
typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */
?
struct malloc_tree_chunk {
/* The first four fields must be compatible with malloc_chunk */
size_t prev_foot;
size_t head;
struct malloc_tree_chunk* fd;
struct malloc_tree_chunk* bk;
?
struct malloc_tree_chunk* child[2];
struct malloc_tree_chunk* parent;
bindex_t index;
};
?
从它们的定义中可以看到结构体malloc_tree_chunk除了比malloc_chunk多三个字段以外,前四个字段和malloc_chunk完全一样。我们先来看看只考虑使用结构体malloc_chun
您可能关注的文档
- 3-6.实验8--电学元件伏安特性的测量.ppt
- 3-6岁儿童学习与发展指南.doc.doc
- 2、软景.ppt
- 2.了解有序参与政治生活的意义和无序参与政治生活的后果.ppt
- 2骨刺与足底筋膜炎没有直接关系。.ppt
- 3-南方医科大学精品课程导航.doc
- 3-JBT《空调与制冷设备用铜端铝连接管》(征求意见稿).doc.doc
- 3-国立高雄师范大学.doc
- 3-头颈部检查.ppt.ppt
- 2果汁饮料中总酸及pH的测定PPT.ppt
- 【安全经验分享】镇江新区金科·祥生悦园建设工地宿舍“3·8”较大火灾事故 1根香烟,7条人命!6人追刑!.pptx
- 面向类集成测试序列生成问题的深度强化学习方法研究.pdf
- 包含电热氢多元储能的综合能源系统能量管理策略研究.pdf
- H公司食品机生产项目工时管理优化研究.pdf
- 上覆充水型溶洞对巷道围岩稳定性的影响及控制技术研究.pdf
- 松散层底部黏土层渗透破坏试验及数值模拟研究.pdf
- 凉水井煤矿薄煤层大跨度开切眼空顶距与支护技术研究.pdf
- 基于功能可用性的家用制氧机造型设计研究.pdf
- 基于原子力显微镜技术的神经细胞药物刺激响应研究.pdf
- 电力电子变换器直流母线电容状态在线监测方法研究.pdf
文档评论(0)