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

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

我在Linux环境中运行。

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

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

它可以是一个很好的设计,非常有效,只需退出并允许操作系统清理所有内容。 默认情况下,Apple OS X会执行此操作 :除非应用程序设置“不要杀我”标记,否则应用程序将被杀死,恕不另行通知。

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

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

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

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

是的,你可以认为。

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

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

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

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

始终释放您分配的内存,因为操作系统将无缘无故地保留更少的内存。 在小型操作系统中,它的内存容量很小。

操作系统将回收内存,但如果你预计它们会超出范围,那么最好先释放内存。 但是,您可以或多或少地依赖程序的终止来为您处理内存管理。