[英].NET CLR: How does runtime calculate size of object?
.NET中有大型對象堆,可用於大小超過85kb的對象。 據我了解堆中對象的大小是這樣計算的
例子:
它是正確的計算方案嗎? 我的例子正確嗎?
CLR中引用類型的分配成本由固定的開銷(取決於體系結構)加上其成員的總量(最終都是值,甚至是引用,4字節或8字節)組成。
請參閱: .NET對象的內存開銷是多少?
它不會分配引用對象的存儲空間,而只會分配引用值。
如果您分配10KB的對象,它將不會達到LOH。
如果分配10 x 10KB 類的數組,則列表和對象都不會在LOH中。 實際上,該列表將是10x 大小的參考體系結構數組。
如果您的類是struct
,則列表將包含容納10KB的結構所需的內存空間,即10次,理論上,它將在LOH上對列表(以及值類型,也包括對象)進行排序。
別忘了, List<T>
基於算法分配空間(當前為x * 2)。 占用空間的不是您放入列表中的內容,而是列表當前具有的Capacity
。
LOH分配限制是運行時的實現細節,並且可能會更改。 看看它是如何工作的很有趣,但是不要構建任何依賴於當前工作方式的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.