2

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

显然,我知道良好的编码习惯是确保删除不需要的内容,所以我不只是问“有什么意义delete”;我只是想知道我的 RAM 中发生了什么。

4

3 回答 3

9

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

但在实践中,如果你有一个健全的操作系统,它很可能会在你的过程之后清理干净。但不要依赖它,真的。

于 2013-02-20T18:33:30.603 回答
8

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

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

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

如果我们编写一个程序,只读取一个文件,将整个文件加载到内存中,当它为统计目的计算所有字母时,打印统计信息并退出,这是否分配了大量内存并没有真正的意义事情。

当然,所有这些都假设调用new只是简单地分配内存。如果对象的构造函数做了更复杂的事情,比如打开文件、获取锁或其他事情,那么如果不调用析构函数,那么很快就会发生各种坏事。

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

于 2013-02-20T18:39:22.227 回答
0

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

于 2013-02-20T18:35:11.653 回答