如果我在编程时无意中造成了内存泄漏,而应用程序终止了,那么泄漏的内存会被释放吗?
是的,“内存泄漏”简单来说就是进程不再引用的内存,因此无法释放。操作系统仍会跟踪分配给进程的所有内存,并在该进程终止时释放它。
在绝大多数情况下,操作系统会释放内存,例如普通的Windows、Linux、Solaris等操作系统。但需要注意,在一些特定环境中,如各种实时操作系统,当程序终止时内存可能不会被释放。
操作系统通常会清理未被显式释放的内存和未被显式关闭的句柄,但这并不受 C++ 标准的保证。你可能会发现一些嵌入式设备没有释放内存泄漏。
话虽如此,我见过的所有 Windows 和 Linux 发行版都会释放内存泄漏。
你可以轻松地创建一个巨大的内存泄露循环来测试它。观察你的 RAM 使用情况的增长,然后关闭你的程序。你会发现 RAM 使用情况回归正常。
在使用 C++ 时,另一个需要考虑的因素是,如果你没有删除堆分配的内存,那么你的析构函数也不会被调用。如果你的析构函数没有被调用,有时你还会遇到其他副作用。
您是否在桌面操作系统(Windows,Linux等)上运行? 如果是这样,一般情况下当程序退出时,系统会释放与该程序相关联的任何内存。
取决于您泄漏的内存是什么。有些内存无法被操作系统回收。然而,在大多数操作系统上,当进程退出时,大多数内存将自动被回收。