在VS 2012(本机C++开发)上使用以下代码:
SIZE_T CppUnitTests_MemoryValidation::TakeMemoryUsageSnapshot() {
PROCESS_MEMORY_COUNTERS_EX processMemoryCounter;
GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)
&processMemoryCounter, sizeof(processMemoryCounter));
return processMemoryCounter.PrivateUsage;
}
我在每个
CPPUnitTest
之前和之后调用此方法,并计算PrivateUsage
字段的差。正常情况下,假设我的内存分配不会泄漏,则此差应为零。在测试类中,只有简单的事情发生。即使没有分配任何内存,也只是创建我的测试类的实例并再次释放它,有时(并非在每个测试迭代中)其差值都大于零,因此该方案似乎是不确定的。
有没有比我更有洞察力的人可以解释如何解决这个问题,或者告诉我我的假设出了什么问题?
最佳答案
简而言之,您的假设是不正确的。您的进程中可能还有很多其他事情在执行内存分配(the Event Tracing thread以及系统上第三方加载项创建的任何其他事情),因此看到内存使用偶尔增加并不奇怪。
关于c++ - PROCESS_MEMORY_COUNTERS_EX创建不可靠的PrivateUsage字段,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22385849/