萌新第一次做这个类型,鼓励一下叭......
关于结构体的(内存)大小,系统为了更便捷的访问变量,会进行内存对齐。
先来说普通情况:
struct A
{
int a;
int b;
}
这样一个结构体,他的内存大小是8个字节。
再说特殊一点的:
struct B
{
int a;
char b;
}
如果是这样,那么这个结构体的大小也是8个字节。
可是,4+2=6,为什么它的大小是8个字节?
因为系统进行了内存对齐,实际的大小是4+4=8。
系统按照结构体成员变量中大小最大的一个,结构体的大小一定是结构体成员变量中大小最大的一个的整数倍。
再来一个例子:
struct C
{
int a;
double b;
int c;
}
这个结构体的大小是24个字节。
让我们来看一下过程:
首先,系统为变量a开辟了8个字节,放了一个int型的变量。
接着,系统又为变量b开辟了8个字节,放了一个double型的变量。
最后,系统为变量c又开辟了8个字节,放了一个int型的变量。
“系统又为变量b开辟了8个字节”,为什么要重新开8个字节呢?
因为刚刚开了8个字节,用掉四个,还剩下4个,放不下double型的变量。
所以把变量b和c的定义交换一下位置,就可以省下8个字节,变成16个字节。