【问题标题】:Does Visual Studio clean up memory automatically when it stop debugging a program?Visual Studio 在停止调试程序时会自动清理内存吗?
【发布时间】:2017-09-13 05:24:06
【问题描述】:

我使用的是 Visual Studio 2015,但我更喜欢每个版本的通用答案。

如果我的代码有内存泄漏并且它在 Visual Studio (F5) 中以 exit value = 0 运行:-

  • (Q1)在debug模式下,真的会泄露吗?
  • (Q2)在release模式下,真的会泄露吗?

如果我的代码保留一些堆内存,那么在我的代码可以适当释放内存之前,我通过按下红色矩形按钮 (stop) 终止它:-

  • (Q3)在debug模式下,真的会泄露吗?
  • (Q4)在发布模式下,真的会泄露吗?

我注意到我的程序在几次run->red button 之后逐渐变慢,在我重新启动计算机后又变快了。这可能只是我的想象 - 或与 GPU 有关。

不过,我还记得run->allocate 10MB->red button 多次的情况,对以后运行的性能没有任何影响。

【问题讨论】:

  • 当程序关闭时,操作系统会回收它分配的所有内存。
  • @DeiDei 我可能会严重误解一些事情。你真的是这个意思吗?如果我在没有释放的情况下分配char* x=new char[10000] -> 然后在释放模式下运行。我的.exe 存在后,这10000 个字节会被释放回操作系统吗?如果是这样,我的程序中的每个内存泄漏都不会长期影响操作系统?所以,重启电脑和内存泄漏完全没有关系?
  • 调试或发布模式无关紧要。当程序终止时它会被释放。
  • @cppBeginner 是正确的。操作系统知道您的进程分配了哪些内存,并在进程退出时回收该内存(如果仍然分配)。内存泄漏仅在您的进程正在运行时才会影响操作系统。
  • @Remy Lebeau 非常感谢。我对它的误解已经超过 5 年了。 ...归咎于我的计算机变慢了,因为我刚刚关闭的程序 XXX 有一些内存泄漏。

标签: c++ visual-studio memory-leaks


【解决方案1】:

没有。

当程序退出时,无论如何退出,操作系统都会释放程序的内存。

【讨论】:

  • 您可以提供一些参考吗?这个答案超乎我的想象。
  • @cppBeginner:重新启动计算机会将所有内存重置为干净的状态。重新启动计算机不是解决内存泄漏的方法,但是如果您在可用内存耗尽之前不退出泄漏进程,则可能会导致严重泄漏
  • @Remy Lebeau 这可以解释很多事情,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 2014-01-16
  • 1970-01-01
相关资源
最近更新 更多