对于值类型,对象大小并不是简单为所有成员所占大小,必须考虑到内存对齐。对于引用类型,多了额外了对象头(16字节),并且内存对齐为8字节。对于array类型,则更为复杂。
primitive type
如熟知, byte占1字节,int占4字节,其他不赘述。
普通ValueType对象大小
在未指定Explicit Layout的情况下,根据字段大小及内存对齐规则计算出总大小,与c++的struct计算规则相似。这里不详细阐述,直接举例吧
// V1 对象大小 1
struct V1
{
public byte a1;
}
// V2 对象大小 8
struct V2
{
public byte a1;
public int a2;
}
// V3 对象大小 24
struct V3
{
public int a1;
public int a2;
public object a3;
public byte a4;
}
class 类型内存占用
与 ValueType相似,但多了对象头的16字节,并且强制内存对齐为8字节。示例:
// C1 对象大小 24
class C1
{
public byte a1;
}
// C2 对象大小 24
class C2
{
public byte a1;
public int a2;
}
// C3 对象大小 40
class C3
{
public int a1;
public int a2;
public object a3;
public byte a4;
}
对象内存大小对比