我有许多数据结构(树、队列、列表),是使用动态分配例程(malloc、calloc)创建的。在某些关键条件下,程序应该终止。遍历所有对象以释放它们的内存需要很长时间。
在程序停止之前避免遍历所有数据结构是否安全?如果是,是否适用于所有操作系统和环境(例如多线程)?
我有许多数据结构(树、队列、列表),是使用动态分配例程(malloc、calloc)创建的。在某些关键条件下,程序应该终止。遍历所有对象以释放它们的内存需要很长时间。
在程序停止之前避免遍历所有数据结构是否安全?如果是,是否适用于所有操作系统和环境(例如多线程)?
进程动态分配的所有内存在进程终止时都会释放回操作系统,无论是故意还是崩溃。文件和套接字也是如此 - 内核中的引用计数将递减,并且如果没有更多的引用,则资源将被释放。
上述情况的一个例外可能是共享内存。
当程序(即进程)终止时,所有本地和堆内存都会自动回收。请注意,这些内存区域特定于进程。因此,在程序终止之前,您可以跳过遍历和释放操作。但是,如果程序使用共享/全局内存,则需要显式回收该内存。最后,它适用于至少Linux / Unix和Windows。我相信它适用于所有现代操作系统。
简短回答:是的。在任何现代操作系统中,内存都是私有的,属于每个进程,一旦进程退出,所有内存都将被操作系统回收(除非操作系统本身出现故障)。
在终止程序之前,您不必释放所有动态分配的内存。操作系统会释放进程拥有的所有内存。它还会关闭您打开的任何网络连接。