代码之家  ›  专栏  ›  技术社区  ›  MistyD Harish Kumar Kailas

是否可以获取由HeapCreate创建的堆内存句柄,以便使用HeapDestroy

  •  -1
  • MistyD Harish Kumar Kailas  · 技术社区  · 6 年前

    我正在尝试重载运算符delete。此删除的签名为 如下所示。现在,内存p基本上是一个使用HeapCreate/HeapAlloc创建的堆点

    void operator delete(void* p)
    {
       HANDLE hndl =//How to get handle of p ?
       HeapDestroy(hndl); 
    }
    

    有没有更好的方法可以解决这个问题?每次使用时是否需要跟踪把手 HeapCreate 所以我可以在 HeapDestroy

    1 回复  |  直到 6 年前
        1
  •  4
  •   Chris Becke    6 年前

    堆函数的正常用法是 HeapCreate 当应用程序启动时 HANDLE 在全球范围内。

    或者通过使用 GetProcessHeap()

    HeapAlloc HeapFree 用于实际分配和取消分配该堆中的内存。

    最后,假设您创建了一个堆,并且没有使用进程堆, HeapDestroy 关闭应用程序时,删除整个堆并释放所有剩余的泄漏分配。


    由于默认情况下存在的进程堆是无限的,因此仅使用 GetProcessHeap

    如果您有一些特定的分配密集型任务,那么您可以通过覆盖该特定类的new和delete操作符(而不是一般的)来使用配置为无序列化和/或低碎片的用户堆。

    这些可能性,嗯,是无止境的对立面。