我们在嵌入式arm linux平台上有一个多线程c ++ qt(4.8.1)应用程序,它有许多qgraphicsitem后代。调用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只监视活动部分,它应该在我们的嵌入式环境中运行几个月。
谢谢,丹尼尔