正如我們所知,堆用於爲應用程序動態分配內存。在應用程序異常終止的情況下,堆內存如何被清除(從而避免內存泄漏)?應用程序突然關閉時的堆內存清除
考慮以下方案:
- 說,一個應用程序崩潰突然在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