1

我们在具有许多 qgraphicsitem 后代的嵌入式 arm linux 平台上有一个多线程 c++ qt (4.8.1) 应用程序。当调用他们的 update() 方法时,mtrace 会显示增量内存使用情况,每次更新大约 16-18 个字节。观察应用程序 VSZ(使用 ps 或 top 命令),它也在不断增加。如果我们在 valgrind --tool=memcheck 中启动应用程序,并且应用程序正常终止,我们不会看到“肯定丢失”的块。

如果我们注释掉 update() 调用,mtrace 不会再显示任何未释放的区域。

Qt 中是否有可能存在“仍然可达”且不断增长的内存块、重新分配的区域、STL 向量等?如果是,我们如何定期清除它们?

程序结构如下:

int main( int argc, char* argv[] ) {
  // new thread creations, initializations, qt object creations
  ...
  mtrace();
  while ( runEnabled ) {
    // this is where new events arrive, and the graphics is updated
    ...
  }
  muntrace();

  // cleanups, desctructions
  ...
}

所以 mtrace 只监控活动部分,它应该在我们的嵌入式环境中运行几个月。

谢谢,丹尼尔

4

0 回答 0