1

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

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

然后继续说这在实践中从未实施过。所以,总结一下,我想更多地了解堆头是如何在“实践”中实现的,以及诸如 free() 之类的函数如何与所述头交互。

4

2 回答 2

3

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

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

于 2012-05-11T22:45:57.940 回答
1

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

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

简单的实现示例:

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

希望有帮助。

于 2012-05-11T22:03:52.707 回答