我正在调试内存不足的异常。当我得到异常时,“虚拟字节”性能计数器指示大量可寻址空间。但是,问题在于可寻址空间严重碎片化,并且“最大可用区域”(从WinDbg中的!address返回)太小。

为了测量内存碎片,我想监视perfmon中的“最大空闲区域”。有没有能给我这个值(value)的性能计数器?

最佳答案

我不认为这条信息只有一个性能计数器,但是可以通过使用VirtualQueryEx Win32函数来推断出它。

您可以使用最小有效虚拟地址(可以从GetSystemInfo获得)来调用它,然后可以使用返回的页面范围的大小来确定要调用VirtualQueryEx的下一个页面范围的基地址。

通过像这样反复调用VirtualQueryEx来遍历地址空间,可以确定MEM_FREE类型的最大页面范围及其基本地址。

这是我用于“地址空间监视器”程序的技术。

10-08 05:20