所有類型都從Object類派生,但值 類型不分配在堆上。值類型變量實際上包含 它們的值。那麼如何才能將這些類型存儲在數組中,並在需要引用變量的方法中使用?有人可以解釋一下,當它們是數組的一部分時,這些值類型如何存儲在堆中?爲數組分配內存
爲數組分配內存
回答
Boxing and Unboxing。有關與數組有關的信息,請參見Here(部分向下)。請注意,這是針對對象數組的,值類型數組(例如int[]
)沒有任何(un)裝箱。
看一看這個問題:
Arrays, heap and stack and value types
您可以將值類型的實例傳遞給期待的對象(引用類)的方法。在這種情況下,會發生裝箱和拆箱。
值類型數組不需要裝箱或拆箱!
非常感謝您的回答。鏈接真的很有用。 – Chat
CLR專門處理值類型的數組。當然,數組是一個引用類型,它是在堆上分配的,但值類型值嵌入到堆記錄中(而不是堆棧中)。
類似地,當引用類型類包含一個值類型字段,該字段的值被嵌入到堆上的記錄..
非常感謝您的回覆。我想我知道答案不夠確定。 – Chat
值類型可以堆棧進行分配。 只有在參數或局部變量或其他值類型的字段中,纔會發生這種情況。
數組中的數值類型和類中的字段本地存儲在數組或類中,而不是指針存儲在那裏 - 值類型導致更多本地內存訪問(性能改進) 並且在數組的情況下,值n恰好在內存中的值n-1,不能用引用類型數組中的對象保證(包括對象數組中的裝箱值 - 也沒有連續性授予者)。在引用類型的數組中,引用是持續的。
- 1. 爲多維數組分配內存
- 2. 爲結構數組分配內存
- 3. 內存分配給數組
- 4. numpy數組內存分配
- 5. 爲靜態數組的動態數組分配內存
- 6. golang組裝內存分配
- 7. 如何爲Julia中的元組數組分配內存?
- 8. 用於數組的C++內存分配
- 9. 動態內存分配 - 二維數組
- 10. 指針數組的C++內存分配
- 11. 如何取消分配數組內存?
- 12. C++類數組內存重新分配
- 13. 數組分配不想要的內存
- 14. int數組的動態內存分配
- 15. 字符串數組的分配內存
- 16. 瞭解字符數組內存分配
- 17. 分配內存到二維數組
- 18. 內存分配使用數組
- 19. C++分配內存數組struct struc
- 20. 將內存自動分配到數組
- 21. 分配內存到字符串數組
- 22. C中的數組的內存分配
- 23. 使用數組的內存分配
- 24. 重新分配C++數組的內存。
- 25. 分配的內存字符數組
- 26. PHP內存和數組分配
- 27. 對象數組的內存分配
- 28. 爲函數中的char數組指針分配內存
- 29. C++動態分配二維數組過度分配內存?
- 30. dynamiclly爲類分配內存
[C#深度](http://www.manning.com/skeet/)是一個很好的開始。 – naveen
我認爲值類型數組本身不是值類型,這就是爲什麼它像任何複合對象一樣存儲在堆中的原因。 –
值類型**可以在堆棧中分配,但情況並非總是如此......這是一種常見的誤解 –