Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我想了解它是如何free()工作的。在下面的示例中,如何free()知道它需要释放的块中有多少字节?
free()
#include <stdlib.h> int main() { char *p= NULL; int size = 25; p = (char *)malloc(size); /* some operation on p */ free(p); }
那是特定于实现的,唯一定义的是它应该如何在应用程序中工作,并且实现可以自由使用它需要的任何结构来提供良好的性能/低内存使用/...
例如,一种方法是在块返回之前保留几个字节,并将大小存储在那里。例如,如果你malloc()是 25 个字节,它实际上会保留 29 个字节,将大小存储在前 4 个字节中,并返回一个指向最后 25 个字节的指针。free()然后可以取指针,减去 4 并读取大小。
malloc()
另一种方法是将地址/大小存储在哈希表中,这样当有人调用时free(),它可以在哈希表中查找大小。