malloc和new的内存 如果没有free或者delete 程序结束后会回收?

据说时候这样的。我也相信,但是,怎么确认这一点?

既然,退出程序会自动回收。那么,除非是那种线上服务器程序,需要长期运行,甚至一年不关机的都要运行的那种。

一般的程序,运行完就退出,你可以不用释放内存。最常见的是一些常用的linux命令行,单次执行,很快完成,不free内存一点没关系。

当然,这些程序代码量少,需要malloc的地方法也少,可能也就一两次,通常不会忘记释放。

而大程序,比如http服务器,确实可能需要长期运行的,这种大一点的程序,很多地方都需要分配内存,就很可能忘记释放 。

真要命,不需要释放时,我们都记得要释放;真正需要释放时,我们又会忘记,被搞的焦头烂额。

阅读 4k
2 个回答

理解没问题。

如果跑一次很短时间就结束,自然会释放。

但很多情况是作为服务器驻留内存运行,那就要及时释放了。

进程结束后,未释放的内存将被系统自动回收。

想在运行时自动回收,常见的两种方式

  1. 在栈上分配内存,函数结束后自动回收。
  2. 在堆上申请内存,并记录它的引用数,当引用数为零时,释放内存。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进