2012-09-14 31 views
1

我使用CreateFileMapping和MapViewOfFile创建一个共享内存块,从而获得一个指针。然后我将QueryWorkingSetEx应用于它,问题是我一直在PSAPI_WORKING_SET_EX_INFORMATION返回结构中获取无效页面。我使用的是NUMA架构,但其他非NUMA机器上发生的情况也是如此。 如果我尝试与malloc分配的内存完全相同的过程并获得有效的结果,有可能QueryWorkingSetEx不支持共享内存指针?QueryWorkingSetEx当应用到共享内存时返回无效页面

回答

1

与Microsoft的支持交谈后,我得到了解决方案,因为QueryWorkingSetEx在MapViewOfFile之后被立即调用,内存地址尚未被触及,所以页面还没有被任何物理内存支持。 解决方法是在调用QueryWorkingSetEx之前简单地对内存地址执行读取循环,这会强制内存管理器使用物理内存备份页面。

+0

这是记录在[VirtualQuery MSDN页面](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366902(v = vs.85).aspx)而不是QueryWorkingSet页面, 不知何故。 – Djof