对于大小超过 85kb 的对象, .NET中的大对象堆。据我所知,堆中的对象大小像这样计算
示例:
计算架构是否正确?我的例子是否正确?
答案 0 :(得分:1)
CLR中引用类型的分配成本包括固定开销(取决于体系结构)加上其成员的总量(最终都是值,甚至是引用,4字节或8字节)。 / p>
参考: What is the memory overhead of a .NET Object
它不分配引用对象的内存空间,只分配引用值。
如果分配10KB对象,则不会命中LOH。
如果分配10 x 10KB 类的数组,则列表和对象都不在LOH中。该列表实际上是一个10 x 大小的架构引用的数组。
如果你的类是struct
,那么列表将包含容纳10KB结构所需的内存空间10次,理论上这将占用列表(并且凭借值类型,对象也是如此) )在LOH上。
不要忘记,List<T>
根据算法(目前为x * 2)分配空间。这不是你列入空间的内容,而是列表当前有多少Capacity
。
LOH分配限制是运行时的实现细节,可能会发生变化。有趣的是看它是如何工作的,但不要构建任何依赖于当前工作方式的东西。