传统上,我使用 CRT 内存报告功能,如下所示:
_CrtMemState state[3];
_CrtMemCheckpoint(&state[0]);
foo();
_CrtMemCheckpoint(&state[1]);
int const diff = _CrtMemDifference(&state[2], &state[0], &state[1]);
_CrtMemDumpStatistics(&state[2]);
最近,我使用了 Visual Studio 的内置堆分析工具和快照。在 foo() 之前创建第一个快照,在 foo() 之后创建第二个快照,然后查看 diff 输出。
现在我同时使用了两者并比较了结果。我预计这两个结果几乎相同,如果不完全相同的话。但这种情况并非如此。内存大小差异很大。他们唯一共享的是分配的数量。我不知道该怎么做。我应该如何解释这些结果?造成差异的原因是什么?我应该相信谁?
请注意,无论是否启用堆分析,CRT 结果都是相同的。