2014-01-29 59 views
3

我在阅读http://support.microsoft.com/kb/243953,他们解释了如何将应用程序限制为单个实例。一个互斥体是在施工和销毁时创建的,他们称之为CloseHandle是否需要调用CloseHandle?

这让我想到,即使应用程序将关闭,严格要求CloseHandle?在很多freebsd c程序中,经常使用不释放malloced内存的做法,因为操作系统会在破坏后更快地清除它。即使进程已关闭,无法调用CloseHandle绑定操作系统中的资源?

+1

操作系统将清理它。如果您正在处理比示例应用程序更复杂的任何事情,清理是稍后强制执行时不会忘记的一种好方法(通常将代码迁移/借入其他软件)。 –

回答

10

即使 进程已关闭,无法调用CloseHandle绑定操作系统中的资源?

否。当进程终止时,操作系统会隐式释放它一直保留的任何句柄,就像分配的内存一样。

从系统的角度来看,不关闭句柄的缺点也与不释放内存的缺点相同:只要进程仍在运行,就可以防止操作系统释放逻辑上未使用的资源。

从开发人员的角度来看,缺点是没有办法自动将分配的资源划分为“泄漏故意”和“由于错误泄漏”的集合。在某些时候(可能不会)如果你意识到你的应用程序泄露了资源,这实际上不应该是这样,像这样打开的句柄会让真正的问题隐藏在虚假的线索中,从而使你的生活变得更加困难。

相关问题