-1

如何最好地识别在运行时未正确释放的内存?我知道有几个程序可以在应用程序关闭时识别已分配和未释放(泄漏)的内存。但我的问题似乎是在程序执行期间(可能是一个线程)创建了一些未释放的对象,尽管它们应该在系统完成“工作”之后。

保持系统运行会随着时间的推移而积累。但是当程序关闭时,内存似乎被正确释放,因此从未报告为我目前使用的 MadExcept 中的泄漏。

我如何最好地检测每次运行“工作”时分配此内存的内容,并且在程序终止之前不释放它?这是在一个相当大的服务器系统中,大约有 100 万行代码、几个 DLL 子项目和运行的多个线程 (40-50)。

也许有一些系统可以识别已分配的对象,这些对象的存活时间超过 X 分钟。假设选择了 60 分钟并且系统继续运行。那么这些信息可以用来定位这些长寿物体并进行调查吗?

4

2 回答 2

0

如果您使用的是 c++ 和 Visual Studio,我认为此链接很有帮助。您可以在需要时使用 _CrtMemCheckpoint 和 CrtMemDumpStatistics。

于 2014-09-17T08:45:46.783 回答
0

我最终尝试了Softwareverify 的 C++ Memory Validator的评估版。

它就像我想要的那样工作,并且能够提供内存分配的时间线等,让我能够确定随着时间的推移积累了什么以及它存在了多长时间。使用它,我能够识别问题并修复它。

于 2014-09-25T08:02:12.830 回答