程序退出时泄漏的内存是否释放?

如果我编程 – 不知道它 – 内存泄漏,应用程序终止,泄漏的内存是否释放?

是的,“内存泄漏”只是一个进程不再提及的内存,因此不能再免费。 操作系统仍然跟踪分配给进程的所有内存,并在进程终止时释放它。

更新

在绝大多数情况下,操作系统将释放内存 – 与Windows,Linux,Solaris等的正常“口味”一样。但是,重要的是要注意,在诸如各种实时操作系统的专用环境中,当程序终止时,内存不能被释放。

执行你的程序的操作系统通常会清理那些没有明确释放的内存,并且不能明确地closures它,但是C ++标准并不能保证这一点。 你可能会发现一些embedded式设备不能释放你的内存泄漏。

这就是说,Windows和所有我见过的Linux发行版都释放了内存泄漏。

你可以很容易地创build一个巨大的内存泄漏循环,但要自己testing一下。 注意你的RAM使用量增长,然后closures你的程序。 你会看到内存使用率回落。


在使用C ++时要考虑的另一个考虑因素是,如果不删除堆分配的内存,那么析构函数也不会被调用。 如果你的析构函数没有被调用,有时候你也会有其他的副作用。

你是否在桌面操作系统(Windows,Linux等)上运行? 如果是这样,是的,一般情况下,系统将在程序退出时释放与程序相关的任何内存。

通常,是的。 有些系统支持共享内存块,但程序退出时不会自动释放。 大多数仍然保留一个引用计数,并删除它时,所有程序打开它退出,但有一些不(例如,16位Windows有几种types的项目,即使没有提及他们保持分配 – 虽然它通常会因为其他原因而崩溃,然后才能积累足够的资源来引发问题…)

取决于你泄漏的内存。 一些内存不能被操作系统回收。 大多数操作系统上的大多数内存会在进程退出时自动回收。

据我所知,一个现代化的操作系统将在程序终止后释放这个内存。