自动内存管理的理念得到了新编程语言的大力支持。如果存在自动管理文件,网络套接字等其他资源的概念,我很感兴趣。
答案 0 :(得分:5)
对于单线程应用程序,可用于代码块范围的资源模式(最后清理)存在于多种语言中。例如在C ++中使用RAII,或在Common Lisp中使用with-open-file(在新的受Lisp影响的语言中使用等效语言 - 在Dylan,C#,Python和Ruby可以将块传递给文件对象。)
我不知道什么更适合现代垃圾收集闪耀的多线程环境,缺少在C ++中组合RAII和引用计数或auto_ptr,这并不总是一个简单的组合。
资源自动管理和自动内存管理之间的一个重要区别是,内存管理通常可以提供非确定性,并且只在流程需要时回收,而资源通常限制在操作系统级别,因此应该是一旦不再使用就开始回收。因此选择智能指针而不是垃圾收集作为管理实现。有一个中间级别的资源--GDI对象,临时文件句柄,线程 - 应用程序想要限制它使用的总量,但不关心将它们释放到其他进程 - 这些通常是合并的,这会让你有所帮助走向自动化管理。
答案 1 :(得分:1)
我们现在可以自动管理内存分配的原因之一就是我们有很多这样的原因。
回到记忆力紧张的日子里,你必须从系统的每一口都中挤出最多的东西。
文件句柄和套接字等其他资源要少得多,而且仍然需要手工处理(双关语)。
同时考虑.net紧凑框架,Windows移动设备使用32mb或64mb的易失性内存并不常见 - 当你想到它时 - 仍然是“很多”。
我想知道.net紧凑型框架的足迹是什么,以及它如何在具有4mb易失性内存的诺基亚手机上执行。
任何想法? (这是一个wiki答案,随意纠正或添加更多细节)
所以,IMHIO我们可以放慢回收内存,因为我们不会匆忙用完它,而其他资源则不然。
答案 2 :(得分:1)
对象持久性和缓存子系统可以被视为文件和资源的自动分配。如果将缓存子系统应用于网络连接,则不必关心文件打开,文件删除等。
自动管理网络连接的方法可以在并行计算环境(即MPI)中完成,您可以通过编程方式设置处理器互连的形状。比你只是将一个消息从一个进程发送到另一个进程,几乎忽略了它的实现方式。有时这些消息会在套接字中翻译。
如果你有一个让你从其Url获取页面的功能,你会认为它是一种自动套接字管理吗?