free如何知道要释放的内存大小?

时间:2011-12-15 10:42:21

标签: c free

  

可能重复:
  C programming : How does free know how much to free?

free()如何知道malloc()或calloc()先前分配了多少内存空闲?我的意思是,这两个函数都接收大小作为参数,而free只需要指向已分配内存的指针。然后free()如何知道要释放多少?

3 个答案:

答案 0 :(得分:1)

你不需要知道。

它可以使用任何机制,由实现标准库的人来决定。

一种典型的方法是在指针返回应用程序之前的某处存储块信息,但您也可以使用完全独立的数据结构来跟踪分配,也许某种树将指针用作键寻找描述该分配的信息。

如果您真的想知道,要学习,您当然可以阅读开源C标准库实现的源代码,其中至少有一对。

答案 1 :(得分:0)

C标准要求将malloc返回的相同地址传递给free以释放动态内存,因此很明显malloc维护某种表或映射每个分配的地址(请注意,确切的详细信息是未经验证的),它会根据地址存储已分配内存的大小,因此它确切地知道为每个返回给其调用者的地址分配了多少内存。在free调用中,它将查找此映射以了解要释放多少内存。

答案 2 :(得分:0)

通常,您在免费商店中拥有类似已分配资源的链接列表。内存管理器将搜索该列表中的内存块,将其从已分配资源列表中删除并将其插回到空闲资源,以便分配函数再次调用它。如何完成这取决于编译器的实现。