代码之家  ›  专栏  ›  技术社区  ›  Loki Astari

操作系统;资源自动清理

  •  7
  • Loki Astari  · 技术社区  · 16 年前

    根据这个答案: When is a C++ terminate handler the Right Thing(TM)?

    当应用程序退出时,有一个“正在”和“未”由操作系统自动清理的资源列表会很好。在你的回答中,如果你能指定操作系统/资源,最好是一个指向某些文档的链接(如果合适的话),那就太好了。

    4 回复  |  直到 9 年前
        1
  •  5
  •   Adrian McCarthy    14 年前

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

    1. WNDCLASS es(“卸载DLL时,DLL注册的窗口类不会被注销。卸载DLL时必须明确注销其类。” MSDN
    2. ATOM s(相对有限的资源)。
    3. RegisterWindowMessage UnregisterWindowMessage .
    4. 如果你不注销Windows XP和更早的版本,可能会有一些残留的奇怪之处 hot key
    5. 数据已复制到剪贴板。我想这并不重要,因为它在当时属于操作系统,而不是放在那里的应用程序。
        2
  •  3
  •   Ana Betts    16 年前

    被清理-释放句柄但不删除文件

        3
  •  3
  •   anon anon    16 年前

    在Windows中,几乎任何你可以处理的东西实际上都应该由操作系统管理——这就是为什么你只能得到一个句柄。这包括但不限于汤姆 以下(从CloseHandle()API的MSDN文档中复制的列表):

    Communications device 
    Console input 
    Console screen buffer 
    Event 
    File 
    File mapping 
    Job 
    Mailslot 
    Mutex 
    Named pipe 
    Process 
    Semaphore 
    Socket 
    Thread 
    Token 
    

    所有这些都应该在应用程序关闭时由操作系统恢复,但可能不会立即恢复,具体取决于其他进程的使用情况。

        4
  •  3
  •   Michael    16 年前

    任何异常都是一个bug——应用程序可能会崩溃,也确实会包含泄漏。操作系统需要可靠,即使在编写不佳的应用程序面前也不会耗尽资源。这也适用于非操作系统资源。向进程分发资源的服务需要在进程退出时释放这些资源。如果他们不这样做,这是一个需要修复的错误。

    • 无REG_OPION_VOLATILE
    • 未使用FILE_FLAG_DELETE_ON_CLOSE创建的文件
    • 用于打印作业的纸张