正如我们所知,堆用于为应用程序动态分配内存。在应用程序异常终止的情况下,堆内存如何被清除(从而避免内存泄漏)?应用程序突然关闭时的堆内存清除
考虑以下方案:
- 说,一个应用程序崩溃突然在Windows或Linux。
- 我们强制在linux中杀死一个应用程序:
kill -9 <process_name>
- Visual Studio中的C++程序在执行过程中抛出一个错误。
是堆管理和清理在上述情况下,有什么不同? [请添加更多的用例场景,这可能是准备在这里]
这个问题在我脑海里想出了,因为我们总是在谈论保证没有内存泄漏发生在我们的代码。现在我们如何处理那些强制关闭可能导致程序退出的应用程序而不调用内存释放调用的场景。
如果这种内存泄漏重复发生,操作系统是否可能缺少堆内存?抑或是OS具有处理它的方式...
感谢您的意见。我忽略了一个明显的问题,即每个进程都提供了一个单独的堆空间。 – vishal 2013-05-08 01:38:56
实际上,我已经研究过一个实时操作系统,每个进程没有单独的heapspace(因为如果在跨越进程边界时必须分配并释放每条消息,堆中发送消息会变得麻烦,所以它更好为[一组进程或所有进程]拥有一个共同的堆栈)。它以每个进程为基础跟踪分配的内存,当进程退出/死亡时,它将释放属于该进程的所有内存。所需要的是操作系统跟踪所有内存分配,而不是堆属于进程。 – 2013-05-08 08:56:20