1.C++中的结构体
#pragma pack(1)
struct A
{
int a1;//属性a1
int a2;//属性a2
A()
{
a1= 0;
a2= 0;
}
};
struct B
{
int b1;//属性b1
int b2;//属性b2
A arrayOfA[100];//预留100
B()
{
b1 = 0;
b2 = 0;
}
};
struct C
{
int c1;//属性c1
int c2;//属性c2
int c3;//属性c3
B arrayOfB[3];//预留3
C()
{
c1 = 0;
c2 = 0;
c3 = 0;
}
};
#pragma pack()
根据以上的定义,一个结构体C的大小为3*4+3*(2*4+100*(2*4))=2436字节。
2.C#中定义的结构体如下:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct A
{
public int a1;//属性a1
public int a2;//属性a2
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct B
{
public int b1;//属性b1
public int b2;//属性b2
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 100, ArraySubType = UnmanagedType.Struct