回答

5

對於單線程應用程序,在一段代碼範圍內可用的資源模式(最後清理)以多種語言存在。例子是在C++中使用RAII,或者在Common Lisp中使用with-open-file(在新的受Lisp影響的語言中相當於Dylan中的C#Python,在Ruby中您可以將塊傳遞給文件對象)。

我還沒有意識到任何更適合於多線程環境的地方,在那裏現代的垃圾收集器發光,缺乏在C++中結合RAII和引用計數或auto_ptr,這並不總是一個微不足道的組合。

資源自動管理和自動內存管理之間的一個重要區別是內存管理通常可以承擔非確定性,並且只有在進程需要時纔會回收,而通常資源在操作系統級別是有限的,所以應該一旦不再使用,應立即回收。因此,選擇智能指針而不是垃圾收集作爲管理實現。有一箇中間級別的資源 - GDI對象,臨時文件句柄,線程 - 應用程序想要限制其使用的總量,但不關心將它們釋放到其他進程 - 這些通常會彙集在一起​​,從而使您獲得一些自動管理的方式。

1

我們現在可以自動管理內存分配的原因之一是我們有這麼多。

早在記憶緊張的日子裏,你不得不從系統所有咬合物中擠出最多的東西。

其他資源如文件句柄和套接字少得多,仍然需要手工處理(雙關語意)。

還可以考慮一下.net緊湊型框架,windows mobile設備有32mb或64mb的易失性內存可以播放 - 當你想到它時 - 仍然是「很多」的情況並不少見。

我想知道.net壓縮框架的佔地面積是多少,以及它如何在具有4mb易失性存儲器的諾基亞手機上執行。

任何任何想法? (這是一個維基答案,隨時糾正或添加更多細節)

因此,IMHIO我們可以承受緩慢的回收記憶,因爲我們不會匆匆跑掉它,這是與其他資源的情況。

1

對象持久性和緩存子系統可以被認爲是文件和資源的自動分配。如果將緩存子系統應用於網絡連接,則不必關心文件打開,文件刪除等。

一種自動管理網絡連接的方法可以在並行計算環境(即MPI)中完成,您可以通過編程方式設置處理器互連的形狀。比你只是從一個進程發送消息到另一個進程,幾乎忽略了它的實現方式。有時這些消息在套接字中被翻譯。

如果你有一個函數讓你從它的Url獲得一個頁面,你會認爲它是一種自動套接字管理嗎?