我正在尝试使用 UMDH 来查找分配了大块内存的位置,但我得到的结果似乎完全荒谬。
我启动程序,等待它达到平衡,然后用 umdh 抓取快照。然后我执行导致它吸收内存的活动,等待它再次达到平衡,然后获取另一个快照。然后我运行一个差异:
umdh -d -v 1.txt 2.txt > diff.txt
我在 perfmon 中目睹了 500M 的额外私有字节(其他内存计数器也相应增长)。UMDH diff 显示了“减少”一些巨大的数字。说什么???谁能解释为什么会这样?
然后我注释掉了在最大增长堆栈中报告的函数中的所有活动。我再次执行上述重现,观察到相同的 500M 增长模式,但 UMDH 报告内存使用量略有增加!!!非常小是那里的有效词。
第一部分真的让我大吃一惊。什么会导致 UMDH 显示堆使用量减少但 perfmon 显示同一进程分配的内存使用量增加相当大?
我考虑了线程堆栈,但线程堆栈计数实际上下降了。还有什么可能进入“私有字节”?