高級語言編程人員通常認爲高級GC語言解決的問題需要手動刪除分配的對象,但忘記了緩衝區溢出和指針算術錯誤混亂。有沒有第二種語言能讓開發者掌握第一種語言?像Java/C#/ etc這樣的特點是「刪除」關鍵字?有沒有指針和明確的對象大小管理,但顯式對象刪除的語言?
0
A
回答
1
0
要添加到mmachenry's answer,
對象Java和C#(不包括數組)往往很小,因爲這些對象通常包含對其他對象的引用 - 他們不要隨便預留空間領域對象被包含在父對象的內存佈局中。這與C++不同。
Java和C#都實現了一種協作確定性對象清理的形式。這種確定性清理旨在處理其他類型的資源,而不是釋放對象的內存。
- 在C#中,這被稱爲IDisposable。
- 在Java中,這被稱爲Closeable。
爲了確保他們會在一些代碼結束時調用,
- 在C#中,在
finally
塊調用IDisposable.Dispose()。或者,在using
塊的開始處初始化此對象,前提是該對象永遠不會離開該塊的範圍。 - 在Java中,調用
finally
塊中的Closeable.Close()。
這些技術被認爲是必要的,這些語言與那些對象交互:
- 在不同的語言(環境),需要明確的清理,如Microsoft的COM實現,或
- 表示網絡,數據庫或操作系統資源或其他一些容量受控的資源。
數組是一個不同的問題,因爲它們可以獲得巨大的(兆字節到千兆字節)。如果應用程序使用大量臨時固定大小的數組,那麼實現數組池可能是有意義的。我在最近的C#項目中使用了這種技術進行圖像處理。 (備註:我的陣列池不是單身人士。)
相關問題
- 1. 確定沒有虛表指針的對象的大小
- 2. 對象B和對象B對象的引用沒有指針
- 3. Arraylist沒有正確刪除對象?
- 4. 對象沒有物理刪除JPA
- 5. GDI對象沒有刪除
- 6. 刪除所有指向java中的對象的指針
- 7. 選擇沒有指針的對象
- 8. 爲什麼要刪除沒有明顯代碼的對象?
- 9. ,對象和指向對象的指針有什麼區別?
- 10. 刪除指針向量中的指針指向的對象
- 11. C++的shared_ptr如何刪除指針對象有多個shared_ptr的
- 12. 管理沒有iboutlets的IB對象
- 13. 指針語法*對象VS對象
- 14. 智能指針列表 - 管理對象生存期和指針有效期
- 15. 自動C++內存/對象實例管理?聰明的指針?
- 16. SmartGWT對象綁定,但沒有指定對象的字段
- 17. ARC下的對象沒有被刪除
- 18. 刪除指針數組的指針指向對象
- 19. 如何刪除java中的所有對象指針
- 20. 原始對象的C++指針和複製對象的指針
- 21. 刪除現有的對象
- 22. 使管理對象真正刪除的
- 23. jQuery.remove() - 刪除對象後,有沒有辦法讓對象返回?
- 24. 指向現有對象的指針?
- 25. 通過指針檢測對象刪除
- 26. 刪除對象經由指針
- 27. 管理堆大小及其中的所有對象的帳戶
- 28. 如何從ArrayAdapter中刪除沒有該對象引用但有另一個一致對象的對象?
- 29. 以前刪除具有較小索引的對象時,刪除對象失敗。
- 30. 刪除指針和使用已刪除對象