- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
malloc实验分析,ptmalloc源码分析,ptmalloc源码分析pdf,malloc,malloc函数,malloc头文件,mallocfree,cmalloc,calloc和malloc的区别,malloc和new的区别
malloc实验分析 施爱春 2009/12/7 内存分配器的质量需求 浪费最小的空间 管理内存的数据结构本身尽量小,同时减少空间碎片 最快的速度 malloc/free是常用的操作,按照2/8原则,常用的操作 就是性能热点 最大化局部性 考虑程序访问内存的局部性,尽量减少cache miss和 page fault 内存分配器的质量需求 最大化可移植性 通常情况下,内存管理器要向OS申请内存,然后进行 二次分配。OS提供的函数因平台而异,应尽量抽象出 平台相关的代码 最大化适应性 尽量让内存管理器适用于很广的情况,只有极少情况 下去调设置参数 分配器具体实现方法 组织策略:隐式空闲链表,显式空闲链表 选择策略:首次适配,下次适配,最佳适配 分割策略:确定分配块的大小 合并策略:立即合并,推迟合并 隐式空闲链表分配器(书上例子) 采用首次适配或下次适配策略 边界标记立即合并方式 显式空闲链表分配器 采用首次适配策略 边界标记立即合并方式 双向单链表结构 显式空闲链表分配器 合并问题:只有物理上相邻的块才能合并,因此用 bit1来标记物理上前一内存块的空闲状态,0 表示空闲,1表示不空闲 空闲块插入方式:采用LIFO方式,插入时间为常数 mm_init 任务:申请合适大小的初始内存,创建双向链表结构,设定链表头指针。最后再标记结束块(字节数为0的已分配内存块) mm_init mm_malloc SearchFreeList 查找首次适配块 RequestMoreSpace InsertFreeBlock RemoveFreeBlock CoalesceFreeBlock mm_realloc mm_free glibc的内存分配器 Glibc分配算法概述 小于等于64字节:用pool算法分配 64到512字节之间:在最佳适配算法分配和pool 算法分配中取一种合适的。 大于等于512字节:用最佳适配算法分配。 大于等于128K:直接调用OS提供的函数(如mmap) 分配 glibc的内存分配器 已分配内存块结构 如果前面有一块有效内存块的,则第一个size_t指明 前一块内存的大小。第二个size_t指明自己的大小, 同时指明自己是不是用mmap分配的(M),前面是否有一 个有效内存块(P) glibc的内存分配器 空闲内存块结构 其他分配算法 红-黑二叉树 伙伴系统 Slab分配器 Thanks! * * 块结构 *
文档评论(0)