代码之家  ›  专栏  ›  技术社区  ›  Jon Cage

程序结束后未释放的内存会发生什么情况?[复制品]

  •  10
  • Jon Cage  · 技术社区  · 17 年前

    复制品 : 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。

    7 回复  |  直到 17 年前
        2
  •  7
  •   ConcernedOfTunbridgeWells    17 年前

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

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

        3
  •  3
  •   David Rodríguez - dribeas    17 年前

    所有这些时刻都将在时间上消失…
    像雨中的泪水

    ——Roy Batty在 桨叶运动员

    这在很大程度上取决于操作系统。大多数操作系统都会为您释放内存,有些不会。如果您现在为桌面操作系统开发一天,那么您可以非常确定内存会被释放。在嵌入式系统或移动电话中,情况就不那么糟了,在下一次重新启动操作系统之前,内存可能会丢失。

        4
  •  2
  •   Eduardo León    17 年前

    它会消失,就像在中一样,操作系统会清除它。操作系统知道程序需要的任何内存,因此当程序关闭时,它使用的任何内存都会被释放,并可供其他程序使用。我相信它马上就可以买到。

        5
  •  1
  •   workmad3    17 年前

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

        6
  •  1
  •   ChrisF    17 年前

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

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

        7
  •  0
  •   bdonlan    17 年前

    答案当然取决于操作系统,但一般来说,当程序终止时,操作系统将遍历并清除所有剩余的分配/映射内存。对于Linux,清除将在进程终止(进入z状态)之前完成。