使用HeapDestroy时需要CloseHandle吗?

标签 c windows winapi

我在堆上分配了一个句柄数组,然后每个句柄与一个线程关联。 完成工作后,我是否必须在调用 HeapDestroy() 之前对每个对象调用 CloseHandle() ?或者后一个调用是否会使第一个调用变得无用?

最佳答案

用完后一定要关闭 handle - 这是一个很好的做法。 Windows 内核具有跟踪分配的句柄以及它们分配给谁的表,因此记住关闭它们将符合您的最佳利益。

句柄泄漏也是一种存在的情况,当调用者请求句柄但没有关闭它时,它们会在一段时间内堆积起来。

您有时还可能因不关闭句柄而导致其他问题(例如,如果您打开了文件的句柄并拒绝共享,但当您不再需要打开的句柄时又保持该句柄打开,则会发生共享冲突)。

准确地说,句柄是假的 - Windows 内核会转换它们,因为它依赖于一个内部的、未记录且未导出的表,该表存储指向链接到该假句柄的内核对象的真实指针地址。

关于使用HeapDestroy时需要CloseHandle吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50972271/

相关文章:

c - armcc中是否有关于字节顺序的预定义宏定义

c - do while 循环中的函数调用只执行一次。

c - Linux内核文件重启

windows - "Run as administrator"和带有 requireAdministrator 的 list 有什么区别?

c++ - 如何在 BN_CLICKED 上启动外部应用程序?

python - CTRL+ALT+DEL 在 win32api 和 python 中不起作用

c++ - 将 Windows C++ 项目从 Qt4 移动到 5 会出现数百个看似不相关的编译错误

c - 将文本读入缓冲区后如何逐行读取?

.NET 窗口捕获

python - 在没有管理员权限的 Windows 上安装 python 模块