内存中对象的大小

时间:2012-02-11 03:32:38

标签: c# memory

如果我有一个100个属性都是int32的类,并且我已经实例化了100个这些对象,那么它甚至需要占用40000个字节(加上对象所需的任何其他开销),甚至在设置任何属性之前或在您第一次为preoperties实际分配值之前,某些(或全部)空间是否仍然未分配?

4 个答案:

答案 0 :(得分:2)

创建对象时,会立即分配所有字段的内存。请注意,对象的大小还包括对象标题,填充等。

答案 1 :(得分:2)

实例化对象后立即使用内存,因为int是值类型。

参考类型的工作方式略有不同。如果要创建属性字符串而不是整数,则仍然会使用~40,000字节,但不会更多,因为此时您的字符串都是空引用(空引用仍保留引用的空间)。当您开始为字符串设置值时,您将开始使用空格。

答案 2 :(得分:1)

与所有值类型一样,

Int32具有默认值。 (0)

是的;一旦你创建了这些Int32变量,它们就会占用内存。

答案 3 :(得分:1)

所有类范围的字段都是在实例化后“分配”的,与本地范围的变量不同,后者可以无限期地保持未分配状态。因此,值类型消耗其适当的大小,并且引用消耗移动指针的大小,无论什么 - 当它们在类级别作用域时。

另请注意,除非布局是顺序的(如在结构中)或显式的,否则大多数值类型将被填充到至少32位。

预测空引用将消耗多少空间并不总是直截了当,但它们是正常的指针,它们在x86平台上消耗4个字节,在x64平台上消耗8个字节。