免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1216 | 回复: 0
打印 上一主题 下一主题

[原创]Doug Lea's malloc(dlmalloc) 学习笔记(2) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-23 11:10 |只看该作者 |倒序浏览
dlmalloc的基本思想是最优适配算法,被管理地址空间从头开始按照用户要求的大小依次分配给用户,分配给用户的每一个内存块的前面就是这块内存的控制块(header)。如下图:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|header |User payload |header |User payload |header |User payload |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

dlmalloc算法有两种内存header,分别对应大小小于256字节的块和大于255字节的内存块。

小块内存的控制块:
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;
};
大块内存的控制块:
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;
};
/* double links -- used only if free. */
为了减小内存管理本身消耗的内存,需要尽可能减少head的大小。
在一块内存分配给用户之后,后续的分配操作就不再需要考虑这块内存,用户在使用的内存块的header中只需要保存用于释放内存信息。因此,double links -- used only if free.


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16402/showart_103696.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP