“免费”如何知道它有多少字节可以释放

时间:2011-10-15 17:27:50

标签: c

  

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

在C中,函数malloc接受一个参数,指定alloacte的字节数。 但是free函数如何不接受任何参数而是指针。 free如何知道它有多少字节可以释放?

2 个答案:

答案 0 :(得分:8)

诸如分配大小之类的信息保存在内存分配器本身内。

在内部,有一些数据结构可以保存所有活动内存分配,大小和地址的列表。它的确切工作原理相当复杂,因为有许多不同的内存分配算法适合不同的目的和分配大小。

通常,大小存储为malloc()返回的地址下方的固定偏移量,但这只是一个实现细节。

答案 1 :(得分:3)

一种相当常见的方法是,在返回指向分配的其余内存的指针之前,通过sizeof(size_t)增加分配并在开始时存储长度。释放内存然后只需要查看被隐藏的长度。