2014-01-29 60 views
3

我在閱讀http://support.microsoft.com/kb/243953,他們解釋瞭如何將應用程序限制爲單個實例。一個互斥體是在施工和銷燬時創建的,他們稱之爲CloseHandle是否需要調用CloseHandle?

這讓我想到,即使應用程序將關閉,嚴格要求CloseHandle?在很多freebsd c程序中,經常使用不釋放malloced內存的做法,因爲操作系統會在破壞後更快地清除它。即使進程已關閉,無法調用CloseHandle綁定操作系統中的資源?

+1

操作系統將清理它。如果您正在處理比示例應用程序更復雜的任何事情,清理是稍後強制執行時不會忘記的一種好方法(通常將代碼遷移/借入其他軟件)。 –

回答

10

即使 進程已關閉,無法調用CloseHandle綁定操作系統中的資源?

否。當進程終止時,操作系統會隱式釋放它一直保留的任何句柄,就像分配的內存一樣。

從系統的角度來看,不關閉句柄的缺點也與不釋放內存的缺點相同:只要進程仍在運行,就可以防止操作系統釋放邏輯上未使用的資源。

從開發人員的角度來看,缺點是沒有辦法自動將分配的資源劃分爲「泄漏故意」和「由於錯誤泄漏」的集合。在某些時候(可能不會)如果你意識到你的應用程序泄露了資源,這實際上不應該是這樣,像這樣打開的句柄會讓真正的問題隱藏在虛假的線索中,從而使你的生活變得更加困難。

相關問題