如果我有一个100个属性都是int32的类,并且我已经实例化了100个这些对象,那么它甚至需要占用40000个字节(加上对象所需的任何其他开销),甚至在设置任何属性之前或在您第一次为preoperties实际分配值之前,某些(或全部)空间是否仍然未分配?
答案 0 :(得分:2)
创建对象时,会立即分配所有字段的内存。请注意,对象的大小还包括对象标题,填充等。
答案 1 :(得分:2)
实例化对象后立即使用内存,因为int
是值类型。
参考类型的工作方式略有不同。如果要创建属性字符串而不是整数,则仍然会使用~40,000字节,但不会更多,因为此时您的字符串都是空引用(空引用仍保留引用的空间)。当您开始为字符串设置值时,您将开始使用空格。
答案 2 :(得分:1)
Int32
具有默认值。 (0)
是的;一旦你创建了这些Int32
变量,它们就会占用内存。
答案 3 :(得分:1)
所有类范围的字段都是在实例化后“分配”的,与本地范围的变量不同,后者可以无限期地保持未分配状态。因此,值类型消耗其适当的大小,并且引用消耗移动指针的大小,无论什么 - 当它们在类级别作用域时。
另请注意,除非布局是顺序的(如在结构中)或显式的,否则大多数值类型将被填充到至少32位。
预测空引用将消耗多少空间并不总是直截了当,但它们是正常的指针,它们在x86平台上消耗4个字节,在x64平台上消耗8个字节。