Windbg中!eeheap无法识别CLR内VirtualAlloc分配的托管堆问题
问题原因说明
!eeheap仅负责展示CLR托管堆及CLR内部维护的原生堆(比如GC堆、Loader堆、JIT编译堆等),它只追踪CLR自身堆管理器分配的内存区域,和Win32原生内存分配API毫无关联。- 你通过
VirtualAlloc直接申请的1GB内存属于操作系统层面的原生内存,完全不在CLR的管理范畴内,因此!eeheap不会将其纳入展示范围。 - 你在
!address -summary中看到的<unknown>类型内存,正是这类未被WinDbg归类到特定组件(如CLR、系统堆、DLL映射区)的原生分配内存,和VirtualAlloc申请的区域完全匹配。
如果要验证这一点,可以将VirtualAlloc返回的内存起始地址传入!address命令(比如!address 0xXXXXXX),查看该区域的详细信息,会明确显示它是VirtualAlloc分配的原生内存,与CLR托管堆无关。
内容的提问来源于stack exchange,提问作者Chris Bao
相关产品推荐
相关产品推荐

