windbg!地址输出中的<unclassified>是什么意思?

例:

0:074> !address -summary --- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal Free 90919 7ec`34659000 ( 7.923 Tb) 99.03% <unclassified> 95426 12`3c3e9000 ( 72.941 Gb) 92.12% 0.89% Heap 744 1`7ee50000 ( 5.983 Gb) 7.56% 0.07% Image 4303 0`0f890000 ( 248.563 Mb) 0.31% 0.00% Stack 225 0`00de9000 ( 13.910 Mb) 0.02% 0.00% TEB 75 0`00096000 ( 600.000 kb) 0.00% 0.00% ActivationContextData 28 0`00025000 ( 148.000 kb) 0.00% 0.00% NlsTables 1 0`00023000 ( 140.000 kb) 0.00% 0.00% CsrSharedMemory 1 0`00006000 ( 24.000 kb) 0.00% 0.00% PEB 1 0`00001000 ( 4.000 kb) 0.00% 0.00% 

嗯,这是一个疯狂的猜测,但可以占用VA空间不在列表中的东西直接调用VirtualAlloc或内存映射文件。 VMMap在这里可能会更有帮助。

<unclassified>用于不能进一步追踪到其他内存管理器的分配,因此是从WinDbg的角度通过VirtualAlloc()分配的。 在较新版本的WinDbg中,这被称为<unknown>

按照这种方式对记忆进行分类有不同的原因:

  • 当然直接调用VirtualAlloc()
  • 通过Windows堆管理器分配大于512 kb(请参阅Sasha Goldshtein的声明 )。
  • .NET运行时的分配(它有自己的堆,WinDbg不知道,直到使用特殊的SOS扩展)
  • 某些版本的MSXML
  • 潜在的其他内存管理器,例如来自Java或Python的堆管理器(只是猜测,我从来没有验证过)