我正在为大学作业编写malloc函数。这是我的想法的基本布局:
1)定义一个节点结构,其中包含指向前一个节点,下一个节点的指针,以及一个用于大小和空位的字符。堆中的每个区域都将包含一个包含此信息的隐藏节点。</ p>
2)Malloc功能。从第一个节点循环开始,通过每个节点检查空缺。如果节点是空的并且足够大,则将ptr返回到不包括节点的区域的开头。如果没有可用空间,请使用sbrk为节点分配请求的空间PLUS空间。
3)自由功能。转到作为parameter-sizeof(struct node)传递的指针,并将空缺设置为空。然后从列表的开头开始,遍历合并相邻空闲空间的列表。
这种方法听起来如何?我主要担心的是实际启动链表。例如,在开始进行任何分配并将ptr存储为全局变量之前,是否应该使用sbrk创建节点?如果是这样,在允许驱动程序调用malloc函数之前如何初始化第一个节点?
提前致谢。我不是要求别人写我的代码,只是为了提供一些关于我的想法的见解和建议。
答案 0 :(得分:2)
第三个基本思想是避免尽可能长时间地合并以增加找到相邻块的机会,所以当你做合并时你可能会做一些真正的好事,并避免浪费时间试图合并只有几个相邻的街区免费。