2014-01-14 14 views

回答

1

是的。 Pascal。帕斯卡不是垃圾收集。它有新的和freemem分別分配和釋放內存。儘管指針算術是可能的,但它不像C那樣需要數組訪問。在幾種Pascal中有一個內置的數組類型和字符串類型,並且許多實現都進行數組邊界檢查。

此外,這是有點偏離主題,但您可能對使用RAII內存管理的語言感興趣。一些RAII語言爲你做內存管理,因此不需要你明確地分配和釋放內存。但是,它們將對象生命週期綁定到詞法作用域而不是引用計數。在這種策略下,解構器更有意義。

我不確定是否需要顯式分配和釋放,或者它是否更好地理解內存何時分配,即使它自動發生並觸發解構器方法。如果是你感興趣的後者,那麼也許可以查看D

0

要添加到mmachenry's answer

對象Java和C#(不包括數組)往往很小,因爲這些對象通常包含對其他對象的引用 - 他們不要隨便預留空間領域對象被包含在父對象的內存佈局中。這與C++不同。

Java和C#都實現了一種協作確定性對象清理的形式。這種確定性清理旨在處理其他類型的資源,而不是釋放對象的內存。

爲了確保他們會在一些代碼結束時調用,

  • 在C#中,在finally塊調用IDisposable.Dispose()。或者,在using塊的開始處初始化此對象,前提是該對象永遠不會離開該塊的範圍。
  • 在Java中,調用finally塊中的Closeable.Close()。

這些技術被認爲是必要的,這些語言與那些對象交互:

  • 在不同的語言(環境),需要明確的清理,如Microsoft的COM實現,或
  • 表示網絡,數據庫或操作系統資源或其他一些容量受控的資源。

數組是一個不同的問題,因爲它們可以獲得巨大的(兆字節到千兆字節)。如果應用程序使用大量臨時固定大小的數組,那麼實現數組池可能是有意義的。我在最近的C#項目中使用了這種技術進行圖像處理。 (備註:我的陣列池不是單身人士。)