C - 显式内存回收

时间:2011-11-04 13:37:33

标签: c memory-management dynamic

我有许多使用动态分配例程(malloc,calloc)创建的数据结构(树,队列,列表)。在某些关键条件下,程序应该终止。遍历所有对象以释放记忆需要很长时间。

在程序停止之前避免遍历所有数据结构是否安全?如果是,它是否适用于所有操作系统和环境(例如多个线程)?

4 个答案:

答案 0 :(得分:4)

进程动态分配的所有内存都会在进程终止时释放回操作系统,无论是故意还是通过崩溃都无关紧要。文件和套接字也是如此 - 如果没有更多的引用,内核中的引用计数会减少,资源会被释放。

以上例外可能是共享内存。

答案 1 :(得分:1)

当程序(即进程)终止时,所有本地和堆内存都会自动回收。请注意,这些内存区域特定于进程。因此,您可以在程序终止之前跳过遍历和释放。但是,如果程序使用共享/全局内存,那么您需要明确地回收它。最后,它至少适用于Linux / Unix和Windows。我相信它适用于所有现代操作系统。

答案 2 :(得分:0)

简短回答:是的。在任何现代操作系统中,内存对每个进程都是私有的,一旦进程退出,操作系统将回收所有内存(除非操作系统本身被破坏)。

答案 3 :(得分:0)

在终止程序之前,您不必free()所有动态分配的内存。无论如何,操作系统都会释放该进程拥有的所有内存。它还会关闭您打开的所有网络连接。