可能重复:
在C中退出程序时释放所需的内存
我正在阅读"Freeing Memory Allocated with malloc"页面,并且遇到了这句话:
在程序结束时释放块是没有意义的,因为当进程终止时,所有程序的空间都会返回给系统.
我意识到作者试图说的是什么,但句子不应该是:
在程序结束时释放块是没有意义的,因为当进程终止时,所有程序的空间都会返回给系统,尽管你仍然应该确保程序在退出之前释放所有malloc的内存.
或者通常的做法是在流程终止之前不取消分配内存?
R..*_*R.. 36
我为此付出了很多热量,但我的立场是在程序退出之前努力释放内存应该被认为是有害的.一方面,它是维护和调试的额外代码 - 但可能不是太多,所以这只是一个小问题.更大的问题是实际效果.
假设你有一个长期存在的程序,它分配了复杂/深层数据结构 - 作为一个很好的例子,想想一个Web浏览器.这些数据很可能在一段时间内没有被使用,而且它已被交换到磁盘.如果你只是exit,磁盘上的换出数据只是标记为未使用,再也不会再触及.但是,如果您浏览所有程序的数据结构以释放它们,您将触摸每个换出的页面,从而导致:
所有这些浪费:
如果您使用足够膨胀的桌面应用程序(Firefox,OpenOffice,GIMP等或Windows等效项)使系统过载以使其交换,然后尝试关闭其中一个,则可以轻松地观察到此行为.您将花费几秒钟(甚至可能甚至约30秒,交换已经足够糟糕)等待它退出.如果程序刚刚exit直接调用(在检查未保存的文档和诸如此类之后),它将立即关闭.
(这是一个非常主观的答案,所以请随便怎么做。)
我认为这是个好习惯,以防您最终添加到流程中,在这种情况下,您可能最终想释放内存。
我认为最好只在需要时才保存动态内存,然后释放它。我通常喜欢在编写free之后立即编写代码malloc,然后将所需的任何代码放在两者之间。