最近的项目中使用到了大量的结构体,忽然想到了结构体中的还有内存对齐的问题,结构体中变量顺序的不同,会造成这个结构体对象在内存中实际占有的大小也是不同的。先上代码,然后再说结论:
#includetypedef struct{ char a; short b; long c; }ST_CHAR_SHORT_LONG; typedef struct{ short b; char a; long c; }ST_SHORT_CHAR_LONG; typedef struct{ short b; long c; char a; }ST_SHORT_LONG_CHAR; int main(){ printf("char size = %dn",sizeof(char)); printf("short size = %dn",sizeof(short)); printf("long size = %dn",sizeof(long)); printf("ST_CHAR_SHORT_LONG size = %dn",sizeof(ST_CHAR_SHORT_LONG)); printf("ST_SHORT_CHAR_LONG size = %dn",sizeof(ST_SHORT_CHAR_LONG)); printf("ST_SHORT_LONG_CHAR size = %dn",sizeof(ST_SHORT_LONG_CHAR)); return 0; }
以上代码运行后的结果是:
char size = 1 short size = 2 long size = 4 ST_CHAR_SHORT_LONG size = 8 ST_SHORT_CHAR_LONG size = 8 ST_SHORT_LONG_CHAR size = 12
以上三个结构体,明明成员类型和数量都是一样的,反而在内存中世纪占用的空间不同,这是怎么回事呢?
原来CPU为了提高内存的读写效率,会自动对齐内存空间,对齐的原则是什么呢?
1. 结构体中的第一个成员放在起始位置0,剩余的成员会依次放在第一个成员所占空间大小倍数的位置。比如第一个成员变量是long类型的,所占空间是4个字节,后面的成员会依次存放距离开始位置在4、 8、 12…的位置;
2. 整个结构体的大小是成员变量中占用最大字节数的整数倍;
以上!
aaa



