【发布时间】:2014-04-18 14:43:58
【问题描述】:
在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 字段的差异。通常这个差异应该是零,假设我的内存分配没有泄漏。
在我的测试类中只会发生简单的事情。即使没有任何内存分配,只是创建我的测试类的一个实例并再次释放它,有时(不是在每次测试迭代中)差异都会超过零,所以这个方案似乎是不确定的。
有没有比我更有洞察力的人可以解释如何解决这个问题或告诉我我的假设有什么问题?
【问题讨论】:
-
PrivateUsage 包括已释放的堆块,现在位于空闲块列表中,可以重新使用。请改用debug allocator。
标签: c++ visual-studio-2012 memory memory-leaks