结构体中成员按照定义时的顺序依次存储在连续的内存空间。但并不是像数组那样的连续。
内存对齐计算内存地址比较方便,内存地址会非常有规律,减小了内存寻址时间。若不对齐,
内存地址的变化非常没有规律,内存地址往往是在寄存器里计算出来的基本类型指的是像
char、int、float、double这样的内置数据类型
结构体总大小大于等于所有成员的大小之和。
结构体的总大小必须可以整除最宽基本成员。
结构体成员的地址 - 结构体的首地址 = 偏移量,必须是当前成员整数倍。
结构体尾部不足的部分,就会被填充。 整数包括正整数、0、负整数。
当只用一个成员时不存在对齐。
两者取最短原则。
实例:
struct A{
char a;
short b;
int c;
float d;
long e;
double f;
};//结构体A的实例占用多少内存
int main(int argc, const char * argv[]) {
struct A a;
printf("A = %lu个字节\n",sizeof(a));
printf("char = %lu个字节\n",sizeof(char));
printf("short = %lu个字节\n",sizeof(short));
printf("int = %lu个字节\n",sizeof(int));
printf("float = %lu个字节\n",sizeof(float));
printf("long = %lu个字节\n",sizeof(long));
printf("double = %lu个字节\n",sizeof(double));
return 0;
}
结果为
A = 32个字节
char = 1个字节
short = 2个字节
int = 4个字节
float = 4个字节
long = 8个字节
double = 8个字节