1

自动内存管理的想法得到了新编程语言的大力支持。如果存在用于自动管理其他资源(如文件、网络套接字等)的概念,我很感兴趣?

4

3 回答 3

5

对于单线程应用程序,在代码块的范围内可用资源的模式,在最后进行清理,存在于多种语言中。示例是在 C++ 中使用RAII ,或在 Common Lisp 中使用 with-open-file(以及在受 Lisp 影响的较新语言中的等价物 - 在 Dylan、C#Python和 Ruby 中相同,您可以将块传递给文件对象)。

我不知道有什么更适合现代垃圾收集闪耀的多线程环境,除了在 C++ 中结合 RAII 和引用计数或 auto_ptr,这并不总是一个微不足道的组合。

资源自动管理和自动内存管理之间的一个重要区别是,内存管理通常可以承受非确定性,并且仅在进程需要时才回收,而资源通常在操作系统级别受到限制,因此应尽快回收因为它不再使用。因此选择智能指针而不是垃圾收集作为管理实现。有一个中间级别的资源 - GDI 对象、临时文件句柄、线程 - 应用程序希望限制它使用的总量,但不太关心将它们释放给其他进程 - 这些通常是池化的,这会让你得到一些走向自动化管理的道路。

于 2009-01-29T10:21:09.220 回答
1

我们现在可以自动管理内存分配的原因之一是我们拥有这么多内存。

在记忆紧张的日子里,您必须充分利用系统的每一口。

文件句柄和套接字等其他资源要少得多,仍然需要手动处理(双关语)。

再考虑一下 .net compact 框架,Windows 移动设备拥有 32mb 或 64mb 的易失性内存来玩的情况并不少见 - 当你考虑它时 - 仍然是“很多”。

我想知道 .net 紧凑框架的占用空间是多少,以及它在具有 4mb 易失性内存的诺基亚手机上的性能如何。

有人有什么想法吗?(这是一个维基答案,请随时更正或添加更多细节)

所以,IMHIO,我们可以承受缓慢的内存回收,因为我们不会匆忙用完它,而其他资源则不是这样。

于 2009-01-29T10:28:17.257 回答
1

Object persistence and caching subsystems can be considered an automatic allocation of files and resources. If you apply a caching subsystem to a network connection you don't have to care about file opening, file deleting, and so on.

A way to manage automatically network connection could be done in parallel computing environment (i.e MPI), you can set programmatically the shape of the processors interconnections. Than you just send a message from a process to another, almost ignoring the way it's implemented. Sometimes those messages are translated in sockets.

If you have a function that let you get a page from its Url, would you consider it a sort of Automatic socket management?

于 2009-01-29T11:21:20.037 回答