【发布时间】: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