是否有可用的函数可以获取当前在堆上分配的内存块数?它可以是 Windows/Visual Studio 特定的。
我想用它来检查函数是否泄漏内存,而不使用专用的分析器。我正在考虑这样的事情:
int before = AllocatedBlocksCount();
foo();
if (AllocatedBlocksCount() > before)
printf("Memory leak!!!");
是否有可用的函数可以获取当前在堆上分配的内存块数?它可以是 Windows/Visual Studio 特定的。
我想用它来检查函数是否泄漏内存,而不使用专用的分析器。我正在考虑这样的事情:
int before = AllocatedBlocksCount();
foo();
if (AllocatedBlocksCount() > before)
printf("Memory leak!!!");
有几种方法可以做到这一点(特定于 Microsoft Visual Studio 附带的 CRT。)
一种方法是在_CrtMemCheckpoint()
您感兴趣的调用之前和之后使用该函数,然后将差异与_CrtMemDifference()
.
_CrtMemState s1, s2, s3;
_CrtMemCheckpoint (&s1);
foo(); // Memory allocations take place here
_CrtMemCheckpoint (&s2);
if (_CrtMemDifference(&s3, &s1, &s2)) // Returns true if there's a difference
_CrtMemDumpStatistics (&s3);
您还可以_CrtDoForAllClientObjects()
使用 Visual C++ CRT 的调试例程和其他几种方法枚举所有分配的块。
笔记:
<crtdbg.h>
标题中。_DEBUG
定义的宏链接。)