【问题标题】:Can I conclude that my app does not cause a memory leak?我可以断定我的应用程序不会导致内存泄漏吗?
【发布时间】:2017-01-04 06:28:11
【问题描述】:

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

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

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

  1. 正如What REALLY happens when you don't free after malloc? 中接受的那样,我认为我的应用程序不是内存泄漏的原因,因为如果是这样,那么在应用程序被杀死后内存使用量会减少(实际上并没有减少)。我说的对吗?
  2. 我通过Windows using too much RAM, how to diagnose resource hog 听说nonpaged pool memory leak 与我的症状相似(即在杀死一些可疑进程后,但内存使用量并未减少)。我的申请会落入这种情况吗?怎么可能?

【问题讨论】:

  • 任务管理器不是此类实验的可靠工具。

标签: c++ memory memory-management memory-leaks


【解决方案1】:

最好的方法是使用那些标准的分析工具。我不熟悉 Visual Studio 中的工具链。但是,我知道 Valgrind 的 memcheck (http://valgrind.org/docs/manual/mc-manual.html) 其灵魂目的是寻找潜在的内存泄漏。

说了这么多,如果你严格按照标准的C++编码比如:

【讨论】:

  • @duong_dajgja 问题是否可重复?
  • 不知道。这是我第一次测试它。现在测试更多...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 2022-06-13
  • 1970-01-01
  • 2019-02-03
  • 2012-11-04
  • 1970-01-01
  • 2021-03-23
相关资源
最近更新 更多