如果我在不知情的情况下编写了内存泄漏程序,并且应用程序终止,那么泄漏的内存是否被释放?
执行程序的操作系统通常会清理没有显式释放的内存和没有显式关闭的句柄,但是 C + + 标准并不保证这一点。您可能会发现一些嵌入式设备不释放您的内存泄漏。
也就是说,Windows 和我所见过的所有 Linux 发行版确实解放了内存泄漏。
您可以轻松地创建一个巨大的内存泄漏循环来自己测试它。观察内存使用量的增长,然后关闭程序。您将看到 RAM 使用量回落。
使用 C + + 时需要考虑的另一个问题是,如果不删除堆分配的内存,那么也不会调用析构函数。有时候,如果没有调用析构函数,也会产生其他副作用。
是的,“内存泄漏”仅仅是进程不再有引用的内存,因此不能再释放。操作系统仍然跟踪分配给进程的所有内存,并在进程终止时释放内存。
在绝大多数情况下,操作系统会释放内存——正如 Windows、 Linux、 Solaris 等普通“风格”的情况一样。然而,需要注意的是,在诸如各种实时操作系统这样的特殊环境中,当程序终止时,内存可能不会被释放。
你是否运行在桌面操作系统(Windows,Linux 等)上?如果是这样,一般来说,当程序退出时,系统将释放任何与程序相关的内存。
取决于你泄露了什么内存。操作系统无法回收某些内存。然而,当进程退出时,大多数操作系统上的大多数内存将被自动回收。
据我所知,一旦程序终止,现代操作系统将释放这个内存。
通常是的。有些系统支持类似共享内存块的东西,但是当程序退出时,这些内存块不会自动释放。大多数仍然保留一个引用计数,并在所有打开它的程序退出时删除它,但少数没有这样做(例如,16位 Windows 有一些类型的项目将保留分配,即使没有引用它们——尽管它通常由于其他原因而崩溃之前,积累了足够的问题...)