我想清除關於ArrayList vs通用列表的內存分配的概念,如果兩者都是值類型並且都是引用類型。任何一個人都可以清理掉嗎?ArrayList vs通用列表在C#中的內存分配?
回答
它們都是參考類型。唯一的區別是ArrayList
輸入較弱。存儲在其中的值類型(如int,bool等)被裝箱到object
類型中。然後,當您在ArrayList
中投射每個項目時,您將它們解開。
因爲所有東西都被裝入對象中,所以可以在ArrayList
中存儲不同類型的對象。
通用列表是強類型的,也就是說,它可以存儲相同類型的對象。沒有拳擊,所以效率更高。
拳擊過程分配更多內存來將對象封裝爲弱類型object
。
如果只在ArrayList中存儲引用類型的對象,則不使用裝箱,而使用稱爲引用轉換的另一種機制。
拳擊只發生在價值類型,你的答案不是很明確。 –
@HenkHolterman好點! – Candide
ArrayList
是引用類型,而不是類型安全,效率較低List<T>
或泛型列表是引用類型,但類型安全,高效的
這裏是等內存分配後的參考類型 How memory is allocated to reference types in C#?
內存使用的唯一區別在於存儲值類型時。 ArrayList將不得不Box(複製)該值。盒裝值將被放置在堆上,至少消耗一個額外的頭部塊(約20個字節)。
但是,只有當您存儲數百萬件物品時,這一點纔會顯着,而不是您一直都在做的事。
數組列表需要裝箱時存儲值類型,這就是爲什麼它消耗更多的內存,不是純粹的引用type.is它? –
ArrayList本身仍然是一個純引用類型。 –
- 1. 鏈接列表的C內存分配
- 2. 在C++中用void *分配內存結構內存分配
- 3. Arraylist中的Java內存分配
- 4. ArrayList vs LinkedList從內存分配的角度來看
- 5. 在C/C++中的內存分配
- 6. C++內存分配在C
- 7. 內存分配Nvidia vs AMD
- 8. C中的內存分配
- 9. C++中的內存分配
- 10. C++中的內存分配
- 11. c內存分配和陣列陣列
- 12. 在C/C++中分配內存失敗
- 13. 通用內存分配器
- 14. 內存泄漏在C /內存分配++
- 15. Java子列表內存分配
- 16. 內存分配在C
- 17. 內存分配在C#
- 18. 內存分配在obj c
- 19. 動態分配內存列表中的字符串C
- 20. 內存分配C++
- 21. 內存分配,C++
- 22. C內存分配
- 23. C++分配內存
- 24. 內存分配C
- 25. 如何通過在C++中使用new來分配內存?
- 26. 的malloc分配內存的列表
- 27. C中的免費C分配內存#
- 28. Java列表VS ArrayList的
- 29. 內存分配和分配在C++中使用OpenMP
- 30. 分配ArrayList中列出
您對內存分配的關注是什麼?只是好奇。 – DarthVader
是的,當然.. –