为什么堆的数量总是1?

时间:2014-09-01 13:30:58

标签: c++ windows debugging windbg heap-memory

我正在使用WinDbg通过使用dt _PEB @$peb来查看流程中的堆数。我得到以下信息,

+0x088 NumberOfHeaps    : 1

现在根据高级Windows调试一书,

  

大多数应用程序隐式使用创建自己的组件   堆。一个很好的例子是C运行时,它创建自己的堆   在初始化期间。

我在main添加断点,但我仍然可以看到只有一个堆正在进行中。

其次,我运行了以下代码,堆的数量仍为1。

BYTE* pAlloc1 = NULL;
BYTE* pAlloc2 = NULL;
HANDLE hProcessHeap = GetProcessHeap();
pAlloc1 = (BYTE*)HeapAlloc(hProcessHeap, 0, 16);
pAlloc2 = (BYTE*)HeapAlloc(hProcessHeap, 0, 1500);

为什么我没有在进程中增加堆的数量?

1 个答案:

答案 0 :(得分:2)

进程启动时,它有一个堆,即默认进程堆。这解释了1.您可以通过调用HeapCreate来创建新堆。如果你这样做,你会看到堆数增加。