在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/

10-11 16:35