编写我自己的malloc,free和realloc时遇到问题

时间:2009-10-27 08:18:53

标签: c malloc

我在使用隐式列表来跟踪c中的空闲块时,实现自己的动态内存分配器时遇到了一些麻烦。 ****具体来说,我在实现realloc 时遇到问题,将代码从find-fit / first-fit更改为next-fit。最合适将是理想的,但现在让我们说下一个适合。我还有其他所有东西,只有这两个项目......

更多信息......

我正在尝试使用我自己的 malloc 版本, free realloc 来实现我自己的动态内存分配器版本。 ..有四种方法用于跟踪动态内存分配器中的空闲块,我在这里使用的第一个是隐式列表,它使用标头。要在隐式列表中查找空闲块,可以在隐式列表中实施多个放置策略。第一个称为first fit或find fit,它位于下面的代码中......它从头开始搜索列表,并选择适合的第一个空闲块。下一个方法被称为下一个拟合,我在尝试实现时遇到了麻烦,并且此方法类似于第一个拟合,但不是在列表的开头开始每个搜索,而是开始每次搜索,前一个搜索停止。最后还有最合适的......这对我来说是理想的方法,但我知道它相当复杂而且相当困难,所以我会采取下一个合适的方式,但是,如果有人知道如何实现最佳配合在隐式列表中,请随意发布。最适合检查每个空闲块并选择适合最小尺寸的空闲块...我知道最佳配合可以消除分配块中的页脚...主要是因为它们真的没有必要......我我只是不确定如何做到这一点......

我知道这是很多代码,但我只是想把所有内容都放在一起,所以不会错过任何内容。

我为realloc留下了空间,它返回NULL并且位于代码中间的某个地方,而find_fit我想要更改为next_fit放置策略方法是在底部......

非常感谢任何帮助......谢谢。

代码全部都在这个网站上...对不起......我在这里发布代码时遇到了很多问题......更是如此,因为它太大了...我只是用谷歌这样看起来更真实。 ..

DMA CODE

我已经在网站上的代码中清楚地标记了这些部分,因此可以毫不费力地找到realloc和find fit方法......

4 个答案:

答案 0 :(得分:1)

解决realloc的一种天真的方法是让realloc调用malloc函数并只复制数据,但我想你正在寻找更复杂的解决方案?

答案 1 :(得分:1)

我的own code只是一个临时实施的ATM,与其他解决方案相比效率不高(dlmalloc()等)。

这是一种精确拟合的首次拟合算法,但在第63至71行中扩展“记住第一次拟合以防止没有精确匹配”的部分应该是微不足道的 - 适合:

检查当前节点的大小,如果它比目前为止记忆的那个小,但仍然足够大以满足请求,请记住当前节点而不是到目前为止记住的节点。

该代码属于类似Public-Domain的许可证,即您可以随意使用它。

答案 2 :(得分:1)

最适合的目的并不是很好,但如果你真的想要它,它很容易实现。将块添加到空闲列表时,按顺序插入它们,按大小排序。然后,当尝试分配块时,首次拟合搜索也会给出最佳拟合。

答案 3 :(得分:0)

如果您没有做作业,为什么不使用valgrind调试内存问题?或者,如果您需要更特殊版本的malloc,为什么不从Dave Hanson's debugging version of malloc开始?

如果你正在做作业,你为什么不告诉我们?