我使用WinDbg通过使用dt _PEB @$peb
来查看过程中堆的数量。我现在就根据高级Windows调试书,为什么堆的数量总是1?
大多数应用程序使用隐式创建自己的 堆组件以下信息,
+0x088 NumberOfHeaps : 1
。一个很好的例子是C运行时,它在初始化期间创建自己的堆 。
我在主要添加断点,我仍然可以看到只有一堆正在处理中。
其次,我跑了下面的代码,仍然堆的数量为1
BYTE* pAlloc1 = NULL;
BYTE* pAlloc2 = NULL;
HANDLE hProcessHeap = GetProcessHeap();
pAlloc1 = (BYTE*)HeapAlloc(hProcessHeap, 0, 16);
pAlloc2 = (BYTE*)HeapAlloc(hProcessHeap, 0, 1500);
为什么我没有收到堆在过程中增加的数量?
您已经从堆中分配了两个分配,但是您尚未创建新的堆。我对Windows几乎一无所知,但大概只有在调用['HeapCreate']时才会得到第二个堆栈(http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa366599(v = vs 0.85)的.aspx)。 – 2014-09-01 13:33:52
一个猜测:通过'HeapAlloc'您可以从进程堆中分配内存,但通过'HeapCreate'您可以创建一个新的私有堆。 – Nazar554 2014-09-01 13:33:53
纯逻辑规定C运行时必须在到达'main'之前创建堆(方式)。 – 2014-09-01 13:43:18