我能断定我的应用程序不会导致内存泄漏吗

Can I conclude that my app does not cause a memory leak?

本文关键字:内存 泄漏 我的 应用程序      更新时间:2023-10-16

昨天我测试了我用C++编写的一个应用程序。我在Visual Studio中以调试模式启动了该应用程序,并让它与其他一些应用程序(Firefox、Explorer、MS Word…)一起运行了一夜。今天早上,我检查了测试PC,发现:

  1. Visual Studio在内存分配语句中遇到一个异常,该异常表示"内存不足">
  2. 火狐也因内存不足而死亡
  3. 任务管理器显示内存使用量约为6.5 GB(已安装8.0 GB)。我总结了任务管理器中显示的所有应用程序的内存使用情况,但总和远小于6.5GB

我检查了Visual Studio和我的应用程序的内存使用情况,但它们都很轻。然后,我连同Visual Studio(vis任务管理器)一起终止了我的应用程序,但内存使用量并没有减少。然后我试图杀死其他一些进程,但内存使用率仍然没有减少。毕竟,我必须重新启动系统才能取回内存。

  1. 正如《当你在malloc之后没有空闲时会发生什么?》中接受的那样?,我认为我的应用程序不是内存泄漏的原因,因为如果是这样,那么在应用程序被终止后,内存使用量就会减少(事实上并没有减少)。我说得对吗
  2. 我听说nonpaged pool memory leak通过Windows使用了太多RAM,如何诊断与我有类似症状的资源占用(即在杀死一些可疑进程但内存使用量没有减少之后)。我的申请会陷入这种情况吗?这怎么可能

最好的方法是使用那些标准的评测工具。我不熟悉visualstudio中的工具链。不过,我知道瓦尔grind的记忆力(http://valgrind.org/docs/manual/mc-manual.html)寻找潜在记忆泄漏的灵魂目的。

如上所述,如果您严格遵循标准C++编码,例如:

  • RAIIhttp://en.cppreference.com/w/cpp/language/raii

  • 共享指针等,你制造内存泄漏的几率会低很多。