如果我编程 - 不知道它 - 内存泄漏,应用程序终止,泄漏的内存是否被释放?
答案 0 :(得分:117)
是的,“内存泄漏”只是一个进程不再具有引用的内存,因此无法再释放。操作系统仍会跟踪分配给进程的所有内存,并在该进程终止时释放它。
在绝大多数情况下,操作系统将释放内存 - 正如Windows,Linux,Solaris等正常“风格”的情况一样。但重要的是要注意在各种实时环境等专用环境中操作系统程序终止时可能无法释放内存。
答案 1 :(得分:29)
执行程序的操作系统通常会清除未明确释放的内存和未明确关闭的句柄,但C ++标准无法保证这一点。您可能会发现一些嵌入式设备无法释放内存泄漏。
据说Windows和我见过的所有Linux发行版都可以解决内存泄漏问题。
你可以轻松地创建一个巨大的内存泄漏循环,然后自己测试一下。观察您的RAM使用量增长然后关闭您的程序。您将看到RAM使用率下降。
使用C ++时的另一个考虑因素是,如果您没有删除堆分配的内存,那么也不会调用析构函数。如果没有调用析构函数,有时你也会有其他副作用。
答案 2 :(得分:12)
您是在桌面操作系统(Windows,Linux等)上运行吗?如果是,是的,一般情况下,当程序退出时,系统将释放与程序相关的任何内存。
答案 3 :(得分:8)
通常,是的。某些系统支持共享内存块之类的东西,但程序退出时不会自动释放。大多数仍保留引用计数并在所有打开它的程序退出时将其删除,但有一些不会(例如,16位Windows有几种类型的项目即使没有任何引用也会保留 - 尽管它经常因为其他原因而崩溃,然后才会累积这个问题......)
答案 4 :(得分:2)
取决于你泄漏的记忆力。操作系统无法回收某些内存。但是,当进程退出时,大多数操作系统上的大多数内存将自动回收。
答案 5 :(得分:2)
据我所知,现代操作系统将在程序终止后释放此内存。