进程终止会自动释放所有使用的内存吗?有啥理由明确地这样做吗?

Posted

技术标签:

【中文标题】进程终止会自动释放所有使用的内存吗?有啥理由明确地这样做吗?【英文标题】:Does process termination automatically free all memory used? Any reason to do it explicitly?进程终止会自动释放所有使用的内存吗?有什么理由明确地这样做吗? 【发布时间】:2015-10-25 21:57:43 【问题描述】:

在 Windows NT 和更高版本中,我假设当进程到期时,无论是因为它自己终止还是被强制终止,操作系统都会自动回收该进程使用的所有内存。是否存在不正确的情况?是否有任何理由明确释放用户模式应用程序使用的所有内存?

【问题讨论】:

相关:***.com/questions/1060160/… 【参考方案1】:

每当一个进程结束时,所有映射到它的内存页都会返回到可用状态。正如你所说,这可以称为“回收记忆”。但是,它不执行诸如运行析构函数之类的操作(如果您使用的是 C++)。

强烈建议释放所有内存,不是从资源的角度,而是从开发的角度。尝试释放内存会鼓励您考虑内存的寿命,并帮助您确保确实正确清理。

这在短期内无关紧要,但我处理过无数软件程序,它们假定他们拥有该进程,因此不必自己清理。但是,有很多理由要在沙盒中运行程序。如果不必每次都重新创建流程,许多随机测试场景可以运行得更快。我也有几个程序认为它们是独立的,只是发现希望集成到更大的软件包中。那时,我们发现了所有内存管理的捷径。

【讨论】:

不利的一面是,释放内存会显着减慢进程退出速度,并使系统在退出过程中变得迟缓。例如,这(曾经是?)对于 Mozilla Firefox 以及在旧机器上运行的文明 5 来说是一个主要的痛点。最好只在调试版本中显式释放内存,或者在显式配置时这样做,而不是在生产中默认这样做。

以上是关于进程终止会自动释放所有使用的内存吗?有啥理由明确地这样做吗?的主要内容,如果未能解决你的问题,请参考以下文章

linux杀掉进程后进程中的堆资源会释放吗

C# 线程运行完之后自己会不会释放掉

DLL 被卸载或进程终止时如何释放资源

有啥理由重载全局新建和删除?

C# kill线程正常释放资源?

C++ 关于内存泄露问题。内存泄露是指用new 分配的内存没有用delete释放,如果未释放会有啥后果?