C - free() 对内存做了什么?

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

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

我有一个链表,其中包含 malloc() 返回的指针。

问题是:free() 到底是做什么的?

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

但是在我的列表中将标志设置为 'is free' 而不是做 memset() 以使其更快更好吗?

C 库函数 void free(void *ptr) 释放之前通过调用 callocmallocrealloc.

分配的内存

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

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

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

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

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

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

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