当程序关闭时,分配的新内存是否总是被释放? (即使从错误/错误等意外关闭,或自定义关闭功能)?
或者它是否仅在从main返回时释放内存?
答案 0 :(得分:5)
是的,操作系统通常跟踪每个进程分配的内存,并在这些进程终止时释放它 - 无论如何。
但是, ,除非有一个非常好的 - 并且有文件证明 - 没有这样做的理由。
很好的理由可能是程序正确性对全局/单例对象破坏顺序的依赖性,或者在终止之前主动释放已分配内存的代价高昂。
然而,虽然承认可能存在程序员故意避免释放内存的原因,但请注意不要因为“良好的理由”而没有形成过于浅薄的心态自己打扫。
我鼓励你习惯于编写确实释放它所获取的内存的代码,并以非常清晰的形式明确地记录你不将遵循这种做法的每种情况。同样,虽然可能存在需要这种情况的角落情况,但释放或不释放获得的记忆总是必须是程序员的主动,故意决定。
注意:从评论中引用Steve Jessop,您不希望主动释放内存的另一个好理由是您的程序需要终止,因为它以某种方式达到了意外状态 - 也许是违反不变量或某种功能的先决条件的人。通常,违反前提条件意味着未定义行为。
由于 - 根据定义 - 没有理智的方法从UB恢复,您可能希望立即终止您的程序,而不是执行可能具有任何结果的进一步操作 - 包括非常不受欢迎的结果。 / p>
答案 1 :(得分:1)
并非所有操作系统(在现代操作系统中都不是问题)都可以执行此操作,最好不要依赖此属性。你可以看看这里: What REALLY happens when you don't free after malloc?