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

c++ memory-leaks

25634 观看

6回复

50399 作者的声誉

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

作者: Martijn Courteaux 的来源 发布者: 2010 年 6 月 4 日

回应 (6)


29

261294 作者的声誉

执行程序的操作系统通常会清除未明确释放的内存和未明确关闭的句柄,但C ++标准无法保证这一点。您可能会发现一些嵌入式设备无法释放内存泄漏。

据说Windows和我见过的所有Linux发行版都可以解决内存泄漏问题。

您可以轻松地创建一个巨大的内存泄漏循环,以自己测试它。观察您的RAM使用量增长然后关闭您的程序。您将看到RAM使用率下降。


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

作者: Brian R. Bondy 发布者: 04.06.2010 04:06

119

96098 作者的声誉

决定

是的,“内存泄漏”只是一个进程不再具有引用的内存,因此无法再释放。操作系统仍会跟踪分配给进程的所有内存,并在该进程终止时释放它。

在绝大多数情况下,操作系统将释放内存 - 正如Windows,Linux,Solaris等正常“风格”的情况一样。但重要的是要注意在各种实时操作系统等专用环境中程序终止时可能无法释放内存。

作者: Justin Ethier 发布者: 04.06.2010 04:06

12

10917 作者的声誉

您是在桌面操作系统(Windows,Linux等)上运行吗?如果是,是的,通常系统将在程序退出时释放与程序相关的任何内存。

作者: Vicky 发布者: 04.06.2010 04:06

2

124809 作者的声誉

取决于你泄漏的记忆。操作系统无法回收某些内存。然而,当进程退出时,大多数操作系统上的大多数内存将自动回收。

作者: Puppy 发布者: 04.06.2010 04:08

2

1485 作者的声誉

据我所知,一旦程序终止,现代操作系统将释放这些内存。

作者: ravibhagw 发布者: 04.06.2010 04:09

8

395567 作者的声誉

通常,是的。某些系统支持共享内存块之类的东西,但程序退出时不会自动释放。大多数仍保留引用计数并在所有打开它的程序退出时将其删除,但有一些不会(例如,16位Windows有几种类型的项目即使没有任何引用也会保留 - 尽管它经常因为其他原因而崩溃,之后积累足够的东西导致问题......)

作者: Jerry Coffin 发布者: 04.06.2010 04:10
32x32