上VS 2012使用下面的代碼,本地C++開發:PROCESS_MEMORY_COUNTERS_EX創建不可靠的PrivateUsage字段,爲什麼?
SIZE_T CppUnitTests_MemoryValidation::TakeMemoryUsageSnapshot() {
PROCESS_MEMORY_COUNTERS_EX processMemoryCounter;
GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)
&processMemoryCounter, sizeof(processMemoryCounter));
return processMemoryCounter.PrivateUsage;
}
我前後各CPPUnitTest
後調用此方法,並計算PrivateUsage
場的差。通常這種差異應該是零,假設我的內存分配不泄漏。
只有簡單的事情發生在我的測試類內。即使沒有任何內存分配,只是創建一個我的測試類的實例並再次釋放它,有時(不是在每次測試迭代中)差異都會達到零以上,所以這個方案似乎是非確定性的。
有沒有人比我更有見識,可以解釋如何解決這個問題或告訴我我的假設有什麼問題?
PrivateUsage包含已發佈的堆塊,現在位於空閒塊列表中,可以重新使用。改爲使用[調試分配器](http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=vs.90%29.aspx)。 –