Qt内存使用检查

Qt memory usage check

我正在处理用 Qt 4.8 (C++) 编写的遗留应用程序。进行更改后,我进行了一些压力测试。我很担心他们的结果。这些是我的发现:

我努力避免使用动态内存,但我知道,Qt 在幕后经常使用它。我怀疑是调用 signal/slot 机制导致了这种快速增长。在测试期间,我在线程之间传递对静态对象的引用,并将其放入基于 C 数组的 QAbstractTableModel 中。当然,每次更改我都会调用 begin/endInsert/RemoveRows。

我的问题是,有没有更可靠的方法来检查是否没有长期记忆问题?我使用了 valgrind,但它没有显示测试代码的问题。除此之外,它可能不是正确的工具——一切都可能在退出时被释放,但我想避免在运行时不断增加内存。也许我应该检查 procfs 的其他参数?

与此同时,我使用 massif 来监控内存使用情况 - 这是正确的工具。我发现 begin/endInsert/RemoveRows 方法在这些地方导致了巨大的内存消耗:

  • QAccessible::queryAccessibleInterace
  • QHashData::allocateNode

关于这个问题,答案是 - Massif - 查看结果 Massif-visualizer

要删除此 "leak" 我必须删除 beginInsertRows 函数。