我重新编码malloc()
free()
和realloc()
。
我有一个链接列表,其中包含malloc()
返回的指针。
问题是:free()
真正做了什么?
目前,我执行了memset()
与free()
具有相同的行为。
但最好只在我的列表中设置一个标记,因为'是免费的'而不是做memset()
以使其更快?
答案 0 :(得分:2)
C库函数void free(void *ptr)
释放先前通过调用calloc
,malloc
或realloc
分配的内存。
您应该使用它来防止内存泄漏。
答案 1 :(得分:2)
通常free(3)对记忆本身没有任何作用。 (如果担心安全或隐私,则应在释放前清除内存。)
如果要实现malloc,则需要一些可用内存块的数据库。当释放内存时,你应该使用伴随的空闲内存加入它,如果有的话。如果一个完整的页面最终未被使用,你应该告诉内核你不再需要它(取决于你如何获得那个内存)
答案 2 :(得分:2)
免费:调用将取消链接/取消分配指针指向的内存,以便其他进程可以使用它。
Memset:调用将设置内存/填充内存位置。它不会取消链接/取消分配内存,并且在程序存在之前仍然会分配/占用内存。这可能导致内存泄漏。
您可以使用 valgrind 工具检查内存泄漏。
如果不需要内存,则取消链接/取消分配内存是一种更好的做法。