C - 显式内存回收

3

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

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


从技术上讲,释放或不释放内存对操作系统和其他程序没有任何影响,因此您可以完全不进行释放。 - BlackBear
我很好奇,释放所有动态分配的内存不是一个好的实践吗?而且如果你没有释放你分配的内存,这可能会导致内存泄漏吗? - Victor
4个回答

4

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

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


1

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


0

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接