应用程序突然关闭时堆内存清除

Vis*_*hal 4 c++ operating-system process

我们知道堆用于为应用程序动态分配内存.如果应用程序终止异常,堆内存如何被清除(从而避免内存泄漏)?

请考虑以下方案:

  • 假设某个应用程序在Windows或Linux上突然崩溃.
  • 我们强制在linux中杀死一个应用程序: kill -9 <process_name>
  • Visual Studio中的C++程序在执行过程中抛出错误.

在上述情况下,堆管理和清理是否有所不同?[请添加可能感兴趣的更多用例场景]

这个问题出现在我的脑海中,因为我们总是谈论确保代码中没有发生内存泄漏.现在我们如何处理强制关闭应用程序的情况,这可能导致程序退出而不调用内存空闲调用.

如果重复发生此类内存泄漏,操作系统是否可能缺少堆内存?或者操作系统有办法处理它......

Mat*_*son 6

假设操作系统是Unix或Windows的典型实现,当应用程序被杀死时,操作系统会释放堆内存,无论它被杀死的方法是什么.

显然,其他操作系统可能无法做到这一点,并且由每个操作系统以有意义的方式解决这个问题 - 我不知道任何操作系统没有"在被杀死的进程后清理",但我确定这样的事情可能存在于这个世界的某个角落.

编辑:可能有其他资源不太容易发布,例如共享内存或多个使用的信号量.但大多数操作系统倾向于通过释放被杀死的应用程序的引用来处理这些问题,并让其他等待任何"等待对象"(互斥,信号量等)的进程"被运行".

  • 作为旁注,如果在析构函数中有一些关键代码(例如刷新到文件中的缓冲区),则不会调用析构函数,从而可能导致可怕的情况. (3认同)