退出程序后Crouton环境不释放内存?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了退出程序后Crouton环境不释放内存?相关的知识,希望对你有一定的参考价值。

我是新手使用Crouton。我试图将它用于Linux环境中的一些C编程实践。无论何时我运行使用malloc()的程序,我都会得到x个字节的内存泄漏错误。当我明确释放分配的内存时,内存泄漏错误消失。这是一个Crouton问题还是整个Ubuntu问题?

有没有办法解决它,以便我不必每次都明确释放分配的空间?我理解free()ing是很好的编码实践和诸如此类的东西,但我只是想知道是否有一种方法可以让你在退出后自动释放分配的内存。

答案

在Linux(以及大多数现代多任务操作系统)上,当进程退出(或终止,例如通过信号)时,其所有资源都由OS内核释放,包括其virtual address space

因此,在退出之前忘记free堆内存肯定是可能的,并且许多(但不是全部)程序正在这样做。

如果您正在开发一个应用程序,您可能仍希望在退出时正确地free每个动态分配的内存区域。这有助于使用像valgrind这样的内存泄漏检测工具(但需要一些开发工作,甚至一些运行时)。

另一答案

C是一种Manual memory management语言,它意味着你需要释放你手动分配的记忆,与Garbage collection形成鲜明对比。您可以使用atexit()等函数来促进程序退出时的内存释放过程,但我不建议将其作为一种良好的编程习惯。如果您使用C编程语言进行编程,则应学会使用free()释放内存。

以上是关于退出程序后Crouton环境不释放内存?的主要内容,如果未能解决你的问题,请参考以下文章

当程序退出后,动态申请的内存会自动释放吗

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

函数一直无法立即退出,在等待了大约30s后才能退出(QMulitHash释放不连续的内存需要很长世间,而这样设置局部变量后又无法避免这个问题)

linux 用户进程结束后 malloc申请的内存会自动释放吗,进程退出后malloc的内存是否会被释放?

如果程序因错误而提前退出,那么释放动态分配的内存的正确方法是啥?

为啥我delete后内存没有被释放?