C 显式内存回收

C 显式内存回收,c,memory-management,dynamic,C,Memory Management,Dynamic,我有许多使用动态分配例程(malloc、calloc)创建的数据结构(树、队列、列表)。在某些关键条件下,程序应该终止。遍历所有对象以释放其内存需要很长时间 在程序停止之前避免遍历所有数据结构安全吗?如果是,它是否适用于所有操作系统和环境(例如,多线程)?当程序(即进程)终止时,所有本地和堆内存将自动回收。请注意,这些内存区域特定于进程。因此,您可以在程序终止之前跳过遍历和释放。但是,如果程序使用共享/全局内存,则需要显式回收该内存。最后,它至少适用于Linux/Unix和Windows。我相信

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


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

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

进程动态分配的所有内存都会在进程终止时释放回操作系统,无论是有意还是通过崩溃。文件和套接字也会发生同样的情况——如果没有更多的引用,内核中的ref计数就会减少,资源就会释放


上述情况的一个例外可能是共享内存。

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

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

从技术上讲,
free()
占用或不占用内存对操作系统和其他程序没有任何影响,因此您根本无法
free()
。我很好奇,释放所有动态分配的内存不是一种好的做法吗?另外,如果不释放分配的内存,可能会导致内存泄漏吗?