当程序关闭时,分配的新内存总是会被释放吗?(即使由于bug/错误等原因而意外关闭,或者自定义关闭函数)?
或者它是否只在从main返回时才释放内存?
发布于 2013-04-14 18:21:43
是的,操作系统通常跟踪每个进程分配的内存,并在这些进程终止时释放它-无论如何。
然而,这不是在你的程序中有内存泄漏的一个有效的理由一般:一个程序应该总是积极地释放它获得的资源(包括内存),,除非有一个非常好的-并且有记录的-不这样做的理由。
好的原因可能是程序的正确性依赖于全局/单例对象的销毁顺序,或者是在终止之前主动释放分配的内存的开销。
然而,虽然承认程序员故意避免释放内存可能是有原因的,但请小心不要养成一种太肤浅的心态,即什么是不清理自己的“好理由”。
我鼓励你习惯于编写代码来释放它获得的内存,并以非常清晰的形式记录下你不打算遵循这种做法的每一种情况。同样,虽然可能有需要这样做的特殊情况,但释放或不释放所获得的内存始终必须是程序员主动的、有意的决定。
注意:引用注释中的Steve Jessop,你不想主动释放内存的另一个很好的原因是当你的程序因为某种原因达到了意想不到的状态而需要终止时-可能是违反了不变量,或者某个函数的前置条件。通常,违反前提条件意味着未定义的行为。
由于-根据定义-没有合理的方法从UB恢复,您可能希望立即终止您的程序,而不是执行可能产生任何结果的进一步操作-包括非常不受欢迎的操作。
发布于 2013-04-14 18:22:37
并不是所有的操作系统(在现代操作系统中这不是问题)都做这个操作,你最好不要依赖这个属性。你可以在这里看一下:What REALLY happens when you don't free after malloc?
https://stackoverflow.com/questions/15997987
复制相似问题