我想知道是否有人能指出我对资源进行深入解释的资源。我想了解更多关于实践中使用的标头以及free()函数如何通过删除标头信息实际“释放”内存。许多资源只提供通用
struct heapHeader
{
heapHeader* next;
heapHeader* previous;
unsigned int size;
}
然后继续说这在实践中从未实现过。总而言之,我想了解更多关于如何在“实践”中实现堆头,以及free()等函数如何与所述头进行交互。
答案 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
希望有所帮助。