堆标题和C中的free()

时间:2012-05-11 21:56:11

标签: c

我想知道是否有人能指出我对资源进行深入解释的资源。我想了解更多关于实践中使用的标头以及free()函数如何通过删除标头信息实际“释放”内存。许多资源只提供通用

    struct heapHeader
     {
       heapHeader* next;
       heapHeader* previous;
       unsigned int size;
     }

然后继续说这在实践中从未实现过。总而言之,我想了解更多关于如何在“实践”中实现堆头,以及free()等函数如何与所述头进行交互。

2 个答案:

答案 0 :(得分:2)

C语言标准没有定义堆的细节。它根据它们执行的任务,它们的参数以及程序员可以对结果做什么来指定malloc,calloc,realloc和free。

如果您要求实施细节,您很想做出可能会在以后咬你的假设。除非您有非常具体的理由这样做,否则您不需要调查内部工作原理。 malloc和free work的方式可能随着下一个OS修订版,下一个编译器版本,甚至使用的编译选项而改变。

答案 1 :(得分:1)

以下是一篇有趣的文章:全面的,描述性的:关于堆管理。

[1] http://www.apriorit.com/our-company/dev-blog/209-linux-memory-management

简单的实现示例:

[2] http://lambda.uta.edu/cse5317/notes/node45.html

希望有所帮助。