在程序结束时释放块没有意义吗? [重复]

|                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
        我为此付出了很多努力,但我的立场是,应该在程序退出之前将精力花在释放内存上,这应该被认为是有害的。一方面,它是维护和调试的额外代码-但可能不会太多,所以这只是一个小问题。更大的问题是实际效果。 假设您有一个长期使用的程序,该程序分配了复杂/深层的数据结构-举一个很好的例子,考虑一下Web浏览器。很可能有一段时间没有使用这些数据了,而且已经交换到磁盘上了。如果您仅选择“ 0”,则磁盘上换出的数据将被简单标记为未使用,并且再也不会被触及。但是,如果您遍历程序的所有数据结构以释放它们,则将触摸每个换出的页面,从而导致: 磁盘访问以读取换出的数据 从内存中逐出其他程序的实际重要数据 以及相应的磁盘访问以换出属于其他程序的所述数据。 所有这些浪费: 用户的时间 磨损在硬盘上(或更糟的是,在SSD /闪存上) 如果您用足够overload肿的桌面应用程序(Firefox,OpenOffice,GIMP等,或Windows等价物)使系统过载,以使其进行交换,然后尝试关闭其中一个,则这种现象很容易观察到。您将花费几秒钟的时间(可能甚至需要30秒钟左右才能完成交换),等待它退出。如果该程序直接调用了“ 0”(在检查了未保存的文档之后),则它将立即关闭。     
        (这是一个非常主观的答案,因此请随便怎么做。) 我认为这是一个很好的做法,以防您最终添加到进程中,在这种情况下,您可能最终想释放内存。 我认为只在需要时才保存动态内存,然后释放它总是很好的。我通常喜欢在写ѭ3after之后立即在代码中写
free
,然后在两者之间放入所需的任何代码。     
        我个人的喜好是不要在程序结束时释放内存-该代码没有任何用处,但是如果操作不正确,仍然可能会引起错误。 同时,保留已分配的内存将触发几乎所有自动检漏仪的报告,因此,如果您使用一个(或曾经使用过),通常最好释放内存以防止实际的泄漏丢失/忽略了。考虑到他们今天的盛行,很难(即使可能的话)确保您也永远不会使用这种东西。     
        仅退出程序而不释放其内存是非常普遍的做法。 这是否是最佳实践肯定要进行讨论-很多时候,一个程序中的main()演变为另一个更大程序中的函数调用,当发生这种情况时,您希望直接获得内存(取消)分配。再者,对于小程序,这可能只是一个繁琐的工作和多余的工作。     
        在程序结束时释放内存的最佳理由是查找泄漏。至少有一些分析器(如purify)会声称,如果在程序结束前没有空闲时间,一切都将泄漏。现在,从内存释放到操作系统的意义上讲,这并不重要,但是要确定是否确实有您打算释放但无意释放的东西变得更加困难。这对于长时间运行的进程(例如服务器进程,守护程序等)很重要,在这些进程中内存泄漏可能会导致严重问题。对于执行任务然后立即退出的简单程序,我真的认为如果您显式释放它并不重要。     
        我非常努力地尝试不明确释放某些内容。例如,线程间通信对象池。我希望操作系统先释放这些线程,然后再始终释放所有线程(可能仍在写入对象的线程),然后再释放进程内存。 如果我不这样做,则会遇到尝试终止阻塞在阻塞调用或运行循环中的线程的所有问题。不会被所有麻烦困扰:) Rgds, 马丁     

要回复问题请先登录注册