0
分配如下的利益我堆緩衝區被分配:地址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