程序结束后发布的C malloc()内存空间?

时间:2011-12-21 20:36:11

标签: c malloc free

  

可能重复:
  What REALLY happens when you don't free after malloc?
  Is freeing allocated memory needed when exiting a program in C

在我的第一个C课程中,我在free()malloc()之后调用了calloc(),因为它在动态分配内存后释放了空格,否则就会消失(我假设直到系统重启)。但是,最近我开始阅读各种编码网站,这些内存将在程序结束时被释放。

哪一个是正确的陈述?

我会查看官方规格,但我不知道从哪里得到它(尝试谷歌搜索)。

感谢。

4 个答案:

答案 0 :(得分:3)

答案真的很短......

这两个陈述都是正确的。


更精致的一个......

它们都是正确的,当您的应用程序完全终止分配的内存时(可能)会释放回系统。

我写了“可能”,因为所有现代/广泛使用的操作系统都会释放所使用的内存,但是一些原始系统可能没有这个“功能”。

由于上述原因,你应该总是使用free来释放已分配但未使用的变量的内存,特别是在运行时(否则你会有内存泄漏,可能/将慢慢占用所有可用内存) 。

如果你想在野外生活并且在应用程序终止之前不释放内存,那对我和大多数人来说都没问题。请确保你要运行应用程序的平台确实释放内存之后回到操作系统。


关于查看标准(“官方规范”)

标准最常/永远不会遗漏实现细节,因此没有任何内容说明在正在运行的应用程序终止时尚未解除分配的已分配内存将会发生什么。

这是特定于实现的,因此取决于/在/运行它。

答案 1 :(得分:2)

在任何受保护内存的系统上(例如Windows 4.x +,Linux,Unix,...),程序终止时会释放内存。

然而,某些嵌入式系统可能 总是这样做。

无论如何,free()一切都是正确的形式。

答案 2 :(得分:1)

这在程序中是有效的,在流程运行时是

其中,这取决于操作系统。没有规范,但绝大多数系统会在完成后清理进程使用的所有内存。

答案 3 :(得分:0)

给定进程的所有内存在终止时释放回系统。但是,在程序退出之前,始终free()内存非常重要,特别是对于长时间运行的程序。在短期运行的程序中,它仍然是很好的做法。当valgrind吐出干净的健康状况时,总是很好!