哪部分代码会增加内存使用量?

时间:2013-04-16 06:02:18

标签: c++ qt memory

我有一个服务器应用程序(使用QTcpServer)。 VLD内存泄漏检查显示没有内存泄漏。 但是当我从客户端向服务器发送命令时,任务管理器显示内存增量。 所以,服务器将耗尽内存。 如何找到导致此类问题的代码部分? 感谢

2 个答案:

答案 0 :(得分:2)

当接受客户端时做一些“工作”显然你的内存使用量会增长。重要的是,当你完成“工作”时,你释放你分配的对象。如果这些是QObject派生对象,Qt将在程序出口处跟踪和删除它们,所以确实没有显示内存泄漏,但是如果在服务器启动并运行时没有删除它们,它们将保持在那里。

你可以做一些事情来减少你的内存使用量,例如不要在堆上创建对象,但是在堆栈上(这些对象会自动消失)尝试使用尽可能少的内存分配,释放已分配的内存记忆,你不需要它等等...

也许通过共享一些代码(如果它不是非常庞大)将帮助我们确定一些我们可以改进内存使用的点。

答案 1 :(得分:1)

填写这些问题,我想我能帮助你:

  • 客户端连接时内存会增加? Y / N
  • 客户端断开连接后内存会减少? Y / N
  • 3个客户端连接/断开后,你处于空闲状态,内存是否增加?
  • 连接1个客户端,发送命令并断开连接。内存增加了吗?

如果最后一个为YES,请尝试隔离使内存增加的命令 如果所有命令都增加了内存使用量,那么处理命令调度的代码就会泄漏 如果只有1个命令泄漏,则该命令正在泄漏。

一般问题:

  • 您是否为使用new分配的每个Qt对象指定了父级,并且您没有使用delete免费?如果没有,那就是你的泄密。
  • 你使用QList还是QHashMap?如果是,请检查您在需要时清除/整理它们

最后,您可以尝试在分配的非QT对象上使用HP Garbage collector