2012-09-14 62 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