C - free()对内存有什么作用?

时间:2015-02-11 12:14:52

标签: c malloc free

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

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

问题是:free()真正做了什么?

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

但最好只在我的列表中设置一个标记,因为'是免费的'而不是做memset()以使其更快?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

通常free(3)对记忆本身没有任何作用。 (如果担心安全或隐私,则应在释放前清除内存。)

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

答案 2 :(得分:2)

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

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

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

如果不需要内存,则取消链接/取消分配内存是一种更好的做法。