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)
释放之前通过调用 calloc
、malloc
或 realloc
.
分配的内存
你应该使用它来防止内存泄漏。
通常 free(3) 不会对内存本身做任何事情。 (如果担心安全或隐私问题,您应该在释放之前清除内存。)
如果你想实现malloc,你需要有一些空闲内存块的数据库。当内存被释放时,如果有的话,你应该加入伴随的空闲内存。如果一个完整的页面最终未被使用,你应该告诉内核你不再需要它了(取决于你如何首先获得该内存)
释放:调用将取消链接/取消分配指针指向的内存,以便其他进程可以使用它。
Memset : 调用将设置内存/填充内存位置。它不会取消链接/取消分配内存,并且内存在程序存在之前保持分配/占用状态。这可能会导致内存泄漏。
您可以使用 valgrind 工具来检查内存泄漏。
如果不需要,最好取消链接/取消分配内存。
我重新编码了 malloc()
free()
和 realloc()
。
我有一个链表,其中包含 malloc()
返回的指针。
问题是:free()
到底是做什么的?
目前,我做了 memset()
以具有与 free()
相同的行为。
但是在我的列表中将标志设置为 'is free' 而不是做 memset()
以使其更快更好吗?
C 库函数 void free(void *ptr)
释放之前通过调用 calloc
、malloc
或 realloc
.
你应该使用它来防止内存泄漏。
通常 free(3) 不会对内存本身做任何事情。 (如果担心安全或隐私问题,您应该在释放之前清除内存。)
如果你想实现malloc,你需要有一些空闲内存块的数据库。当内存被释放时,如果有的话,你应该加入伴随的空闲内存。如果一个完整的页面最终未被使用,你应该告诉内核你不再需要它了(取决于你如何首先获得该内存)
释放:调用将取消链接/取消分配指针指向的内存,以便其他进程可以使用它。
Memset : 调用将设置内存/填充内存位置。它不会取消链接/取消分配内存,并且内存在程序存在之前保持分配/占用状态。这可能会导致内存泄漏。
您可以使用 valgrind 工具来检查内存泄漏。
如果不需要,最好取消链接/取消分配内存。