【发布时间】:2014-11-11 03:17:53
【问题描述】:
如何最好地识别在运行时未正确释放的内存?我知道有几个程序可以在应用程序关闭时识别已分配和未释放(泄漏)的内存。但我的问题似乎是在程序执行期间(可能是一个线程)创建了一些未释放的对象,尽管它们应该在系统完成“工作”之后。
保持系统运行会随着时间的推移而积累。但是当程序关闭时,内存似乎被正确释放,因此从未报告为我目前使用的 MadExcept 中的泄漏。
每次“工作”运行时,我如何最好地检测分配此内存的内容,并且直到程序终止才释放它?这是在一个相当大的服务器系统中,大约有 100 万行代码、几个 DLL 子项目和运行的多个线程 (40-50)。
也许有一些系统可以识别已分配的对象,这些对象的存活时间超过 X 分钟。假设选择了 60 分钟并且系统继续运行。那么这些信息可以用来定位这些长寿物体并进行调查吗?
【问题讨论】:
-
也许您至少可以在检漏仪模式下使用Boehm's GC。
-
我认为没有考虑到程序员应该考虑什么的辅助程序。只要内存是可访问的,就没有什么可以推断出一个对象应该被删除。
-
40two:我知道这是有问题的。如果我从头开始构建它,我可能会更好地了解可能导致它的原因。我在想的是,也许有一些程序可以过滤并获得所有已存活超过 60 分钟的对象的列表。如果您看到相同类型的负载具有较长的使用寿命,您可以对此进行调查。
-
Boehm 的 GC 可以与
free或delete一样的无操作使用 -
你试过 valgrind 或者其他静态代码分析工具吗?
标签: c++ windows memory-leaks c++builder madexcept