Linux是否會立即自動重新聲明應用程序使用的所有內存?Linux和內存泄漏
如果是這樣,那麼應用程序真的會在退出之前釋放所有內存?
在調用exit(0)之前真的有必要在多線程應用程序中調用每個類的析構函數嗎?
如果Linux總是立即重新聲明應用程序使用的所有內存,那麼內存泄漏只是應用程序創建的懸掛指針,而且它也只是它的生命週期。
Linux是否會立即自動重新聲明應用程序使用的所有內存?Linux和內存泄漏
如果是這樣,那麼應用程序真的會在退出之前釋放所有內存?
在調用exit(0)之前真的有必要在多線程應用程序中調用每個類的析構函數嗎?
如果Linux總是立即重新聲明應用程序使用的所有內存,那麼內存泄漏只是應用程序創建的懸掛指針,而且它也只是它的生命週期。
Linux會立即自動重新聲明應用程序使用的所有內存嗎?
不,但是在你意味着的意義上。所有屬於該進程的虛擬內存都被釋放。不共享的幀可用於其他進程。
如果是這樣的話,那麼應用程序真的會在退出前釋放所有內存嗎?
是的,有以下幾個原因:
當沒有釋放內存是您想要的時候可能會出現的情況,通常這些會與性能相關,並且只針對這些情況。
在調用exit(0)之前真的值得在多線程應用程序中調用每個類的析構函數嗎?
這與上一個問題非常相似。另請注意,不釋放來自第三方的資源,操作系統庫與釋放內存的效果完全相同。
如果Linux總是立即重新聲明應用程序使用的所有內存,那麼內存泄漏只是應用程序創建的懸掛指針,也只是它的生命週期。
是。這個理論唯一破壞的時候是所持有的資源是全球性的,並且在流程終止時不會消失。共享內存,設計不佳的第三方庫,臨時文件等都是這些例子。
它確實取決於這些構造函數的作用。如果他們所做的只是釋放私人記憶,那麼不需要。
如果他們做了其他事情,比如可能沒有寫入數據的光盤文件,那麼這可能很重要。
我非常喜歡_exit()庫調用的大風扇 - 它就像exit()但atexit處理程序不運行。
強大的應用程序應該能夠隨時容忍消失,因此有效的退出方式是_exit(),因爲它比受到更多的控制而不是崩潰。
當然還有其他泄漏資源的方式 - 這不僅僅是記憶。臨時文件是一個明顯的文件 - 在你調用_exit之後它將保持存在。
此外,如果您創建posix或sysv共享內存它保持現有的進程退出。這實際上類似於臨時文件(在Linux下,它在內核中的tmpfs上實現爲一個)
此外,還有專業性。 – Joe 2010-08-25 12:45:48
@Hasturkun:謝謝我從來沒有引用過 – 2010-08-25 14:33:29
@Joe:你是什麼意思? – 2010-08-25 15:59:25