一、默认优化
两条原则:
1.起始地址为该变量类型所占内存的整数倍,若不足则不足部分用数据填充至所占内存的整数倍。
2.该结构体所占总内存为结构体成员变量中最大数据类型的整数倍。
当结构体包含数组时,第一条原则变为按照数组类型,而不是数组大小。
typedef struct _NAME
{
unsigned short a; //2B
unsigned char b; //1B
unsigned short c;
}NAME;
//总共2+2+2=6字节。
typedef struct _NAME
{
unsigned short a;
unsigned char b;
unsigned short c[3];
unsigned char d;
unsigned short e;
}NAME;
//总共2+2+6+2+2=14字节。
二、不优化
如果想按照实际数据大小,只需要在结构体外层加上:
#pragma pack(1)
typedef struct _NAME
{
unsigned short a;
unsigned char b;
unsigned short c[3];
unsigned char d;
unsigned short e;
}NAME;
#pragma pack()
//总共2+1+6+1+2=12个字节。