2013-02-20 36 views
1

如果我在执行过程中分配了一些内存,但从未调用delete并且程序终止,会发生什么情况?操作系统是否可以释放我分配的所有内存,并且内存不会“浪费”?或者,在计算机重新启动之前,是否会丢失部分内存?如果我不'删除'会发生什么?

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

+0

释放您的内存,以便操作系统可以再次使用它。当你的程序终止时,所有的内存将被自动释放,但是,它值得释放,所以在你的进程的整个生命周期内,内存的使用将保持较低的内存占用。 – RageD 2013-02-20 18:32:28

+0

谢谢,这正是我以为发生的事情。 – user3728501 2013-02-20 18:32:53

+2

问题之一,你应该......忘记它。只是...新的和删除。总是。总是!总是! – gaussblurinc 2013-02-20 18:35:17

回答

4

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

举例说,你写一个邮件服务器,它分配内存来保存它收到的每封邮件。但实际上并不需要存储通过它发送的每封电子邮件。因此,在接收和转发电子邮件几天之后,邮件服务器不能分配更多内存,它已经占用了内存中的所有可用字节 - 但实际上它并没有对内存做任何有用的操作,因为电子邮件不再被使用 - 他们已经得到处理。另一方面,如果我们编写我们的邮件服务器程序来分配一个缓冲区来读取电子邮件,处理它,当它完成时,内存被重新用于另一封电子邮件,那么没有什么意义了永远释放那个记忆。

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

当然,所有这一切都假定拨打new是简单的分配内存。如果对象的构造函数做了更复杂的事情,比如打开一个文件,获取一个锁或其他东西,那么如果不调用析构函数,很快就会发生各种各样的坏事。操作系统将(对于常用操作系统,如Linux,MacOS,iOS,其他Unix系统,Windows,DOS,OS/2等)释放您的应用程序使用的内存。

7

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

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

0

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

+2

对于使用虚拟内存管理器的操作系统而言,这仅仅是一种情况 - 目前使用的操作系统大部分都是这样 - 但它不适用于某些实时操作系统。 – Void 2013-02-20 18:37:04

相关问题