当程序关闭时窗口是否自动释放内存(不从主程序返回)?

Tez*_*Tez 5 c++ memory

当程序关闭时,分配的新内存是否总是被释放?(即使从错误/错误等意外关闭,或自定义关闭功能)?

或者它是否仅在从main返回时释放内存?

And*_*owl 5

是的,操作系统通常跟踪每个进程分配的内存,并在这些进程终止时释放它 - 无论如何.

但是,这并不是程序存在内存泄漏的正当理由:程序应该始终主动释放它获取的资源(包括内存),除非有一个非常好的 - 并且有文档证明 - 没有这样做的原因.

好的理由可能是程序正确性对全局/单个对象的破坏顺序的依赖性,或者在终止之前主动释放分配的内存的代价.

然而,虽然承认可能存在程序员故意避免释放记忆的原因,但请注意不要过于浅薄地认为自己之后不清洁的" 好理由 ".

我鼓励你习惯于编写确实释放它所获取的内存的代码,并在你打算遵循这种做法的每种情况下以非常清晰的形式明确记录.同样,虽然可能存在需要这种情况的角落情况,但是释放或不释放获得的记忆总是必须是程序员的积极的,有意的决定.


注意:从评论中引用Steve Jessop,你不想主动释放内存的另一个好理由是你的程序需要被终止,因为它以某种方式达到了意想不到的状态 - 可能是违反不变量或者前提条件的一定的功能.通常,违反前提条件意味着未定义的行为.

因为 - 根据定义 - 没有明智的方法从UB恢复,你可能想立即终止你的程序,而不是执行可能有任何结果的进一步行动- 包括非常不受欢迎的行为.

  • 建议不正确.在程序结束时没有黑色或白色的答案,正确的答案是:*取决于*. (2认同)
  • @AlokSave:如果你能详细说明,我会很高兴的.为什么程序不能关闭它打开的文件,关闭它打开的连接,释放它获取的内存,解锁它锁定的全局互斥锁等等? (2认同)

归档时间:

查看次数:

1352 次

最近记录:

12 年,2 月 前