据说,valuetype来自system.object。为什么对象派生类比valuetype结构占用更多空间? 提前致谢
答案 0 :(得分:4)
每个对象都有一个对象标题。这是32位机器上的8个字节,4个用于同步块,4个用于类型句柄。值类型值仅在装箱时从System.Object派生。取消装箱时int为4个字节,装箱时为12个字节,标题为+8个字节。
检查this answer以更深入地了解盒装值类型的内容。
答案 1 :(得分:0)
因为编译器对值类型的处理方式不同。尽管他们继承自Object
,但他们并未存储为对象。
对象存储在堆上,带有两个指针的额外开销(32位系统上为8个字节,64位系统上为16个字节)。值类型以内联方式存储,或者作为对象的一部分存储,或者存储在方法调用的堆栈帧中,并且没有额外的开销。
答案 2 :(得分:0)
对于从ValueType继承的值类型以及从Object继承的值类型,大多数时间都会有一点白色谎言。 unboxed int或bool没有与它存储的任何与该继承相关的内容。但是,如果它是盒装的,它会获得它(这将在一些操作中隐式发生)。大多数语言隐藏了这一点,因此它们看起来与我们在使用它们时从Object派生的任何其他对象看起来相同,但当我们将它们用作那些时,它们也可以作为简单类型。