我正在阅读 http://support.microsoft.com/kb/243953,他们解释了如何将应用程序限制为单个实例。互斥量在构造和销毁时创建,它们称为 CloseHandle
。
这让我想到,即使应用程序将关闭,是否也严格要求调用 CloseHandle
?在许多 freebsd c 程序中,经常使用不释放 malloced 内存的做法,因为操作系统会在销毁时更快地清理它。即使进程已关闭,也无法调用 CloseHandle 占用操作系统中的资源?
最佳答案
不。当进程终止时,操作系统会隐式释放它一直保留的所有句柄,就像分配内存一样。
从系统的角度来看,不关闭句柄的缺点再次与不释放内存的缺点相同:只要进程仍在运行,就阻止操作系统释放逻辑上未使用的资源。
从开发者的角度来看,缺点是无法将分配的资源自动划分为“故意泄漏”和“由于错误而泄漏”的集合。当(可能不是如果)在某个时候您意识到您的应用程序正在泄漏不应该泄漏的资源时,像这样的开放句柄将通过帮助真正的问题隐藏在虚假线索中而使您的生活变得更加困难。
关于c++ - 是否需要调用 CloseHandle?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21428147/