free()的功能

时间:2013-06-12 04:39:15

标签: c free

我想了解free()的工作原理。在下面的示例中,free()如何知道需要释放的块中有多少字节?

#include <stdlib.h>

int main()
{     
    char *p= NULL;
    int size = 25;
    p = (char *)malloc(size);

    /* some operation on p */

    free(p);
}

1 个答案:

答案 0 :(得分:2)

那是特定于实现的,唯一定义的是它应该如何适用于应用程序,并且实现可以自由地使用它所需的任何结构来提供良好的性能/低内存使用/ ...

作为一个例子,一种方法是在返回块之前保留几个字节,并在那里存储大小。例如,如果你malloc() 25个字节,它实际上将保留29个字节,将大小存储在4个第一个字节中,并返回指向最后25个字节的指针。然后free()可以取指针,减去4并读取大小。

另一种方法是将地址/大小存储在哈希表中,这样当有人调用free()时,它可以在哈希表中查看大小。