-3

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

#include <stdlib.h>

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

    /* some operation on p */

    free(p);
}
4

1 回答 1

2

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

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

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

于 2013-06-12T04:51:00.477 回答