地址WinDbg的命令说,堆的地址是“REGionUsageIsVAD”,即使它是用HeapAlloc
问题描述:
分配如下的利益我堆缓冲区被分配:地址WinDbg的命令说,堆的地址是“REGionUsageIsVAD”,即使它是用HeapAlloc
0:047> !heap -p -a 1d7cd1f0
address 1d7cd1f0 found in
_DPH_HEAP_ROOT @ 5251000
in busy allocation ( DPH_HEAP_BLOCK: UserAddr UserSize - VirtAddr VirtSize)
1cf8f5b0: 1d7cc008 3ff8 - 1d7cb000 6000
68448e89 verifier!AVrfDebugPageHeapAllocate+0x00000229
76e465ee ntdll!RtlDebugAllocateHeap+0x00000030
76e0a793 ntdll!RtlpAllocateHeap+0x000000c4
76dd5dd0 ntdll!RtlAllocateHeap+0x0000023a
000ca342 TEST+0x0002a342
000be639 TEST+0x0001e639
正如你所看到的,它是使用HeapAlloc分配()。当我在这个堆的指针运行!address
命令我得到:
ProcessParametrs 01699928 in range 01699000 0169a000
Environment 016976e8 in range 01697000 01698000
1d790000 : 1d7cb000 - 00005000
Type 00020000 MEM_PRIVATE
Protect 00000004 PAGE_READWRITE
State 00001000 MEM_COMMIT
Usage RegionUsageIsVAD
它自称是RegionUsageIsVAD
。根据this计算器答案,RegionUsageIsVAD
通常意味着两两件事:
- 这是一个.NET应用程序在这种情况下,CLR分配存储器这个 块。
- 该应用程序调用VirtualAlloc来分配 内存块。
我的方案不适合这些情况之一。我证实,CLR没有使用运行.cordll -ve -u -l
到我:
CLR DLL status: No load attempts
是什么意思RegionUsageIsVAD
在这种情况下?
“我**堆的兴趣**类似产品具有以下分配** **堆栈跟踪“ - 堆和堆是非常不同的内存分配机制。堆没有堆栈跟踪(实际上堆栈也没有)。你什么意思? – Olaf
“分配堆栈跟踪”我的意思是堆缓冲区分配时的堆栈跟踪。您可以在windbg中使用'!heap -p -a'命令来查看此堆栈跟踪。 – SivaDotRender
Iirc在heapalloc使用虚拟分配之后,大小会有一些限制,如果我发现我的旧帖子 – blabb