9

我对内存问题很陌生。希望你不要认为这是一个愚蠢的问题。

我知道大于 85,000 字节的内存将被放入 C# 中的 LOH 中,即

Byte[] hugeByteCollection = new Byte[85000]; 

我想知道大小为 10000 - 20000 且对象包含 10 个成员变量(字节类型)的集合是否会被放入 LOH 或 SOH 中?

4

1 回答 1

4

对象数组的大小是对象数乘以指针大小。这是因为只有值类型存储在数组本身中,引用类型(对象)将存储在其他地方并且不会计入数组的大小。因此 85000/4=21250 个对象和 85000/8=10625 个对象可以分别以 32 位和 64 位模式存储在 SOH 上的数组中。

编辑:感谢 Hans Passant 指出这假设使用的集合类型是数组而不是列表。列表将自身调整为大于内容以避免过多的分配。有关详细信息,请参阅此链接

于 2015-09-05T16:44:03.130 回答