例1
struct A
{
int a;
int b;
};
所占字节为 8;
例2
struct B
{
char a;//1+3
int b;//4
};
所占字节依旧为 8;
为什么不是 1+4=5呢?
如下图
结构体内存对齐,所以a后面会预留3个字节与b对齐;
共占用 8 个字节;
例3
struct C
{
char a;//1+1
short b;//2
int c;//4
};//8
例4
struct G//不需要考虑对齐的应用
{
char a;
char x;//保留,不使用
short b;
int c;
};
struct H
{
int a;
struct HH//12
{
char b;//12,13~15
int c;//16
}d;
};//12
struct I
{
int a;//8
double b;//12
};//16
int main()
{
printf("%d\n",sizeof(struct F));
return 0;
}
前几个变量所占内存若为下一个倍数则无需多预留内存;
不同的定义顺序可引起不同的内存占用,所以定义时浪费内存越少越好。