【问题标题】:In C++, Do I need to deallocate memory before close a program [duplicate]在 C++ 中,我是否需要在关闭程序之前释放内存 [重复]
【发布时间】:2011-06-22 20:53:25
【问题描述】:

可能重复:
Is it acceptable not to deallocate memory

这是一个普遍的问题。我有一些使用一些全局数据结构的 c++ 桌面项目。我的问题是,在我退出应用程序之前,我是否需要为这些数据结构释放内存?反正应用关闭后内存会被操作系统销毁。

【问题讨论】:

  • 并非所有操作系统都像这样释放内存,因此不释放内存可能是一个不好的习惯。它也不适用于长时间运行的程序。
  • 您能否提供一个未解除分配的操作系统示例?你能解释一下你的第二句话吗?

标签: c++


【解决方案1】:

简短的回答:否。如果你足够迂腐(这是一件好事)......请参阅编辑)

当程序退出时,操作系统会自动释放程序分配的所有内存。

不过,养成自己打扫卫生的习惯是个好习惯,所以当必要时不要忘记这样做。

编辑:根据@David Thornley 对该问题的评论,并非所有操作系统都以这种方式运行。我没有理由不相信这一点,但我确实相信您可能遇到的任何消费者操作系统都会这样做。但是,最好的做法是永远不要依赖非标准功能,无论多么常见,除非您有特定的理由这样做。

【讨论】:

    【解决方案2】:

    不,您不必这样做。就 C++ 而言,它不会导致未定义的行为。但这不是习惯的好习惯。

    【讨论】:

      【解决方案3】:

      是的,内存将被操作系统回收,但是,最好始终释放分配的所有内存,以便检查程序中的内存泄漏。如果不这样做,使用 valgrind 之类的工具会更难发现泄漏

      【讨论】:

        【解决方案4】:

        正如您所说,您的操作系统会在程序终止时释放您的程序使用的所有内存,因此原则上您不必担心这一点。甚至有人可能会争辩说,操作系统一次完成这项工作的速度比你一个一个地完成的要快。

        如果您确切地知道最后留下了哪些全局对象悬空,那绝对没问题。

        始终编写完全干净地终止的代码以避免忽略实际泄漏可能只是一个好习惯;这仅取决于您对代码的信心。

        【讨论】:

          猜你喜欢
          • 2014-10-05
          • 2021-01-14
          • 2019-04-21
          • 2017-11-04
          • 2015-06-18
          • 2023-03-29
          • 2014-08-29
          • 1970-01-01
          • 2011-05-03
          相关资源
          最近更新 更多