关于 malloc:C – free() 对内存有什么作用?

C - What does free() do to the memory?

我重新编码了 malloc() free()realloc()

我有一个带有 malloc().

返回的指针的链表

问题是:free() 究竟做了什么?

目前,我做了一个 memset() 以具有与 free() 相同的行为。

但是在我的列表中设置一个标志为"免费"而不是做一个 memset() 以使其更快更好吗?


Free : 调用将取消链接/取消分配指针指向的内存,以便其他进程可以使用它。

Memset : 调用将设置一个内存/填充一个内存位置。它不会取消链接/取消分配内存,并且内存保持分配/占用,直到程序存在。这可能会导致内存泄漏。

您可以使用 valgrind 工具来检查内存泄漏。

如果不需要,最好取消链接/取消分配内存。


通常 free(3) 不会对内存本身做任何事情。 (如果担心安全或隐私问题,您应该在释放之前清除内存。)

如果你想实现malloc,你需要有一些空闲内存块的数据库。当内存被释放时,如果有的话,你应该将它与伴随的空闲内存一起加入。如果一个完整的页面最终未被使用,您应该告诉内核您不再需要它(取决于您最初是如何获得该内存的)


C 库函数 void free(void *ptr) 释放先前通过调用 callocmallocrealloc 分配的内存。

您应该使用它来防止内存泄漏。