Anu*_*uri 0 c memory malloc pointers memory-management
我看过这个 -
当程序终止时,将释放由malloc(例如)分配并且未使用free()函数释放的内存.并且它由opearting系统完成.那么什么时候有或没有垃圾收集器进入图片?
或者是并非所有操作系统都在程序终止时自动释放内存?
有关要求malloc,并free是所有现代计算机的操作系统是正确的.但整个声明反映了对垃圾收集目的的完全误解.
你打电话的原因free不是在程序终止后清理.您调用的原因free是允许在后续执行长时间运行的程序期间重用内存.
考虑一个每秒处理一百条消息的消息服务器.您malloc收到新消息时会打电话.然后你必须用它做很多事情.您可能需要记录它.您可能必须将其发送给其他客户.您可能必须将其写入数据库.当你完成后,如果你不这样做free,几天后你会有数百万条信息被困在内存中.所以你必须打电话free.
但你什么时候打电话free?当一个客户端完成发送消息时,另一个客户端可能仍在使用它.也许数据库仍然需要它.
垃圾收集的目的是确保释放对象的已用内存(因此可以在应用程序的生命周期内重新使用它来保存新消息),而不必使应用程序员承担与准确跟踪相关的任务(和风险)当任何可能正在使用它的代码不再需要该对象时.
如果应用程序运行时间不长或者没有任何生命周期难以弄清楚的对象,那么垃圾收集就不会有太大的好处.还有其他技术(例如引用计数指针)可以提供许多与垃圾收集相同的好处.但垃圾收集确实存在一个真正的问题.