在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
字段的差异。通常情况下,这个差异应为零,假设我的内存分配没有泄漏。
我的测试课里只发生简单的事情。即使没有任何内存分配,只需创建我的测试类的实例并再次发布它,有时(不是在每次测试迭代中)差异都大于零,所以这个方案似乎是不确定的。
是否有人比我更有洞察力,可以解释如何解决这个问题或告诉我我的假设有什么问题?
答案 0 :(得分:0)
简而言之,您的假设是不正确的。您的进程中可能还有很多其他事情正在执行内存分配(the Event Tracing thread,以及您的系统上由第三方加载项创建的任何其他内容),因此看到内存使用率上升也就不足为奇了偶尔
答案 1 :(得分:0)
在Hans Passants调试分配器链接之后,我注意到有关Microsoft内存泄漏检测工具的更多信息,特别是_CrtMemCheckpoint函数。
我关注的链接是“http://msdn.microsoft.com/en-us/library/5tz9b54s(v=vs.90).aspx”
现在,当使用此函数获取内存快照并使用_CrtMemDifference函数检查差异时,这似乎可靠且确定性。