如果我不“删除”会怎样?

时间:2013-02-20 18:30:07

标签: c++ memory-management

如果我在执行期间分配一些内存但从不调用delete并且程序终止会发生什么?操作系统是否会释放我分配的所有内存,没有内存会被“浪费”?或者,在计算机重新启动之前,我会丢失一部分内存吗?

显然我知道良好的编码习惯是确保你删除你不需要的东西,所以我不只是问“delete的重点是什么”;我只是想知道我的RAM里面发生了什么。

3 个答案:

答案 0 :(得分:7)

从概念上讲,会泄漏内存。

实际上,但是,如果你有一个理智的操作系统,它很可能会在你的过程后清理。但是,真的不要依赖它。

答案 1 :(得分:4)

这一切都取决于你的程序做了什么,以及它使用了多少内存 - 在任何给定时间和整个运行时间内。

例如,假设您编写了一个邮件服务器,它分配内存以容纳它收到的每封电子邮件。但它实际上并不需要存储通过它的每封电子邮件。因此,在接收和转发电子邮件几天后,邮件服务器无法分配更多内存,它已经消耗了每个可用内存字节 - 但它实际上并没有对该内存做任何有用的事情,因为电子邮件已不再使用 - 他们已被处理。

另一方面,如果我们编写我们的邮件服务器程序,例如,分配1MB的缓冲区来读取电子邮件,处理它,当它完成时,内存被重用于另一封电子邮件,那么就没有什么意义了。永远释放那种记忆。

如果我们编写一个只读取文件的程序,将整个文件加载到内存中,当它为统计目的计算所有字母时,打印统计信息和退出,无论是否分配大量内存真的很重要

当然,所有这些都假设对new的调用是SIMPLY来分配内存。如果对象的构造函数执行更复杂的操作,比如打开文件,获取锁或其他东西,那么如果不调用析构函数,那么很快就会发生各种不好的事情。

操作系统将(对于常用的操作系统,如Linux,MacOS,iOS,其他Unix系统,Windows,DOS,OS / 2等)释放应用程序使用的内存。

答案 2 :(得分:0)

当进程终止时,操作系统释放分配给进程的所有内存。因此,程序终止后,程序分配的内存将被操作系统释放并回收。