释放记忆的重要性?

时间:2009-06-14 14:36:28

标签: c++ c memory

  

可能重复:
  What REALLY happens when you don’t free after malloc?

在C / C ++中结束程序时,必须通过释放指针进行清理。如果你没有释放内存会发生什么,比如你有一个指向int的指针并且在结束程序时没有删除它?内存是否仍然使用,只能通过重新启动释放,还是在程序结束时自动释放?在最后一种情况下,为什么要释放它,如果操作系统为你做的那样?

5 个答案:

答案 0 :(得分:8)

当程序结束时,操作系统将回收所有内存(已释放或未释放)。尽管如此,释放你分配的所有内容仍然是一种好习惯 - 主要是为了养成它的习惯,或者如果你扩展你的程序使它不会像以前那样结束。

答案 1 :(得分:5)

在Windows,Linux或MacOS等桌面操作系统上,您的内存将会被清理干净。

在某些实时或嵌入式操作系统上,它不会为您清理。

但是当你完成它时总是释放内存是个好主意 - 请记住,当你的程序运行时,所有内存仍在使用中。如果你不释放它,机器的内存使用量将会增加。

你也必须小心重构 - 假设你开始编写一个分配了一些内存的main()函数,而且你不会因为操作系统会为你做这些而烦恼它。但是,然后你将代码移动到一个很长一段时间内被调用很多次的函数 - 突然间你会发生巨大的内存泄漏。

答案 2 :(得分:4)

当程序结束时,操作系统将释放所有内存。

你应该自己释放它的原因是内存是你正在运行的程序中的有限资源。当然,在非常短的运行简单程序中,无法释放内存将不会产生明显的影响。但是,对于长时间运行的程序,无法释放内存意味着您将消耗有限的资源而不补充它。最终它会耗尽,你的程序会严重崩溃。这就是你必须释放记忆的原因。

答案 3 :(得分:1)

操作系统在程序终止时释放内存,但如果你只有一点内存泄漏,这是你最不担心的事情。

更有问题的是:1)如果它发生在一个循环中,你的程序会大小膨胀,2)在C ++中,如果你的“新”ed对象不是“删除”d,你的析构函数不会运行,这可能会导致更严重的问题(互斥漏水,或资源泄漏未被操作系统清理,数据完整性问题,列表仍在继续)

答案 4 :(得分:0)

正确释放内存非常重要,这样,当您需要跟踪问题时,帮助您查找内存泄漏的工具将具有有意义的输出。允许操作系统为您释放内存会给您以后可能使用的任何分析工具增加额外的噪音。即使操作系统将内存返回给系统,您也应该采用坚如磐石的设计,以正确的方式使用内存,并且可以最好地使用工具。

相关问题