【发布时间】:2012-08-23 10:08:05
【问题描述】:
我有一个使用 Visual Studio 2008 使用 C++ 编写的 Windows 应用程序。我想获得有关内存使用情况的统计信息,以找到处理内存使用情况的瓶颈和位置。理想情况下,我希望有一个工具可以做到这一点,而不必进入并将计数器/分析逻辑添加到代码本身。基本上我正在寻找的是:
- 所有分配的列表(释放与否无关紧要,每次分配时我都想知道)
- 每个分配的调用堆栈和一个计数器,表示调用代码和分配内存的次数。
- 有关已释放和未释放内存的信息(以查找泄漏)。理想情况下,它应该足够智能来确定内存是否仍在使用中,或者它是否真的已经泄漏(通过作用域或其他一些智能机制)。
我不在乎它是否是免费工具。以下是我已经看过的一些工具:
- Rational PurifyPlus:老实说,我无法充分利用这个工具。它返回很多误报。此外,它并没有给出我上面列表中的前 2 项,而是似乎只关注内存错误和泄漏。
- Sysinternals VMMap:这个工具很有趣,可以让我看到内存是如何分布的(堆栈、堆和共享堆等)。它还让我看到分配的调用树,但不是很直观或有用。很难从数据中理解。
- DevPartner Boundschecker:我真的认为这是迄今为止最没用的工具。几年前我在他们被 DevPartner 收购之前使用了它,我记得它工作得更好。但它并没有真正为我提供我需要的统计数据,而且它似乎也无法正确检测内存泄漏。
我提前感谢任何帮助/建议。我的应用程序是一个服务器,在压力测试期间随着时间的推移会遇到严重的内存增长问题(最终由于虚拟字节超过 32 位应用程序的限制而崩溃)。拥有正确的工具将帮助我隔离我们分配内存的位置以及我们可能泄漏内存的位置。
【问题讨论】:
-
你是否可以在 Linux 上编译你的代码,否则问题太大了?顺便说一句,如果您分配了很多自己的类,您可以使用 CRTP 来计算和记录活动实例的数量:stackoverflow.com/questions/7097679/…
标签: c++ windows memory-leaks profiling