在C中退出程序时释放所需的内存

时间:2011-04-10 13:38:23

标签: c memory-management malloc free

如果我使用malloc在我的C程序中分配了内存,现在我想退出,我是否必须释放已分配的内存,或者我可以假设,因为我的整个程序终止,它将被释放OS?

我在Linux环境中运行。

8 个答案:

答案 0 :(得分:20)

任何现代操作系统都会在进程终止后清理所有内容,但依靠此操作通常不是一个好习惯。

这取决于您正在编写的程序。如果它只是一个快速运行和终止的命令行工具,您可能不会打扰清理。但请注意,正是这种心态导致守护进程和长时间运行程序中的内存泄漏。

答案 1 :(得分:8)

简单地退出并允许操作系统清理所有内容,这可能是一个很好的设计并且非常有效。 Apple OS X now does this by default:应用程序在没有通知的情况下被杀死,除非应用程序设置了“不要杀我”标志。

通常,释放每个内存分配都需要很长时间。某些内存页可能已被换出,必须重新读回,以便将它们标记为空闲。内存分配器必须做很多工作来更新可用内存跟踪数据。所有这些努力都是浪费,因为该计划正在退出。

但这必须通过设计来完成,而不是因为程序员已经忘记了已分配的内存!

答案 2 :(得分:3)

在任何情况下,在进程终止时,操作系统都会释放它。所以你不需要它,但因为这是一个很好的做法,你为什么不这样做呢? :)

实际上,对于复杂的代码,我不会冒险不发布我不确定100%的东西,因为程序会在之后退出。因此,对于任何最小的疑问,只需释放它。

答案 3 :(得分:2)

操作系统将回收内存,因此您无需释放内存。

大多数程序都会释放内存,因为如果你没有释放任何内存,那么你可能会因这些故意泄漏而出现问题。

答案 4 :(得分:2)

是的,你可以认为。

尽管在不需要内存后立即释放内存是一个好习惯,但即使对于仅运行一小段时间的软件也是如此。

答案 5 :(得分:1)

Linux将释放已分配的内存并在进程终止时关闭文件描述符。

答案 6 :(得分:1)

始终释放已分配的内存,因为操作系统将毫无理由地保留较少的内存。它在小型操作系统中非常引人注意,它占用的内存很小。

答案 7 :(得分:0)

操作系统将回收内存,但是如果您希望在使用其他内容之前它们会超出范围,那么放弃内容是一种很好的做法。但是,您可以或多或少地依赖程序的终止来为您处理内存管理。