OS; 资源自动清理

Mar*_*ork 7 resources operating-system

从这个答案:什么是C++终止处理程序右Thing(TM)?

当应用程序退出时,操作系统会自动清理"是"和"不"的资源列表会很不错.在您的回答中,如果您可以指定操作系统/资源并且最好是指向某个文档(如果适用)的链接,那将是很好的.

显而易见的一个:

内存:是自动清理.题.有没有例外?

Adr*_*thy 5

有一些模糊的资源,当应用程序崩溃或退出而没有明确释放它们时,Windows无法清理,主要是因为操作系统不知道它们是否很重要.

  1. 临时文件 - 正如其他人提到的那样.
  2. 在全球范围内注册的WNDCLASSES("当DLL被卸载由DLL注册的无窗口类是未注册的.一个DLL必须明确注销自己的类时,它被卸载." MSDN)如果您的全局窗口类也有一类DC,那么DC将泄漏也是如此.
  3. 全球ATOM(相对有限的资源).
  4. 使用创建的窗口消息ID RegisterWindowMessage.这些都是为了泄漏,因为没有UnregisterWindowMessage.
  5. 信号量和事件在技术上没有泄露,但是当拥有的应用程序消失而没有发出信号时,其他进程就会挂起.对于互斥锁而言,情况并非如此.如果拥有的应用程序消失,则会释放等待该Mutex的其他进程.
  6. 如果在退出之前不注销热键,Windows XP及更早版本可能会有一些残留的怪异.其他应用程序可能无法注册相同的热键.
  7. 在Windows XP及更早版本中,在进程崩溃后生成僵尸控制台窗口的情况并不少见.(具体来说,GUI应用程序也会创建一个控制台窗口.)它显示在任务栏上.您所能做的就是最小化,恢复或移动窗口.
  8. 错误的驱动程序可能会因退出时未显式释放资源的应用程序而恶化.非分页池泄漏是相当常见的.
  9. 数据已复制到剪贴板.我想这并不重要,因为它在那时由操作系统拥有,而不是将它放在那里的应用程序.
  10. 在卸下挂钩之前安装过程崩溃时,不会卸载全局安装的挂钩.