我想了解free()
的工作原理。在下面的示例中,free()
如何知道需要释放的块中有多少字节?
#include <stdlib.h>
int main()
{
char *p= NULL;
int size = 25;
p = (char *)malloc(size);
/* some operation on p */
free(p);
}
答案 0 :(得分:2)
那是特定于实现的,唯一定义的是它应该如何适用于应用程序,并且实现可以自由地使用它所需的任何结构来提供良好的性能/低内存使用/ ...
作为一个例子,一种方法是在返回块之前保留几个字节,并在那里存储大小。例如,如果你malloc()
25个字节,它实际上将保留29个字节,将大小存储在4个第一个字节中,并返回指向最后25个字节的指针。然后free()
可以取指针,减去4并读取大小。
另一种方法是将地址/大小存储在哈希表中,这样当有人调用free()
时,它可以在哈希表中查看大小。