【问题标题】:What happens to memory that is not freed after end of program? [duplicate]程序结束后未释放的内存会怎样? [复制]
【发布时间】:2010-10-26 05:44:08
【问题描述】:

重复What REALLY happens when you don’t free after malloc?

比如说:

int main()
{
  char* test = new char[50000];
  return 0;
}

程序完成后分配的内存会发生什么?它会立即为其他应用程序释放吗?或者也许在一段时间后?或者它可能永远丢失在系统中?或者它是否被交换到磁盘永远不会返回到 RAM?或者可能是完全不同的东西?

我想知道主要 3 种操作系统会发生什么:Windows(XP 及更高版本,如果有任何差异)、Linux、Mac OS X。

【问题讨论】:

    标签: c++ c memory operating-system


    【解决方案1】:
    【解决方案2】:

    在任何带有 MMU 的操作系统(包括 Unix、Linux、OSX 和 Windows NT 系列)上,该进程都有一个数据结构,用于为 MMU 设置页面映射。当进程终止时,该映射被释放,页面被添加到操作系统的空闲池中。

    在非受保护内存的 O/S 平台(如 DOS 或某些实时操作系统)上,可能需要显式释放内存,如果没有正确整理,O/S 池可能会泄漏内存。

    【讨论】:

      【解决方案3】:

      所有这些时刻都会随着时间流逝......
      像雨中的泪水

      -- 银翼杀手

      中的罗伊·巴蒂

      这在很大程度上取决于操作系统。大多数操作系统会为您释放内存,有些则不会。如果您现在为桌面操作系统开发,那么您可以确定内存将被释放。在嵌入式系统或移动电话中情况并非如此,在这种情况下,内存实际上会丢失,直到操作系统下次重新启动。

      【讨论】:

        【解决方案4】:

        它消失了,就像操作系统清理它一样。程序要求的任何内存,操作系统都知道,所以当程序关闭时,它使用的任何内存都会被释放,并可供其他程序使用。我相信它会立即可用。

        【讨论】:

          【解决方案5】:

          一旦使用它的进程完成,操作系统应该将其回收为系统内存。

          【讨论】:

            【解决方案6】:

            在 Windows 中,当程序关闭时,操作系统会释放内存。如果是大量内存,可能需要一些时间。

            据我所知,当我使用各种风格的 Unix 时,所有操作系统都是一样的。

            【讨论】:

              【解决方案7】:

              答案当然取决于操作系统,但通常操作系统会在程序终止时清理并清除所有剩余的分配/映射内存。在 Linux 的情况下,清理将在进程终止(进入 Z 状态)之前完成。

              【讨论】:

                猜你喜欢
                • 2012-01-25
                • 1970-01-01
                • 2019-09-08
                • 1970-01-01
                • 2012-10-04
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多