参考地址:
分析过程:
1) 成员数据对齐
#pragma pack(4) //gcc 默认为4 struct test_t { int a; /* int型,长度4 = 4 按4对齐;起始offset=0 0%4=0;存放位置区间[0,3] */ char b; /* char型,长度1 < 4 按1对齐;起始offset=4 4%1=0;存放位置区间[4] */ short c; /*short型, 长度2 < 4 按2对齐;起始offset=6 6%2=0;存放位置区间[6,7] */ char d[6]; /* char型,长度1 < 4 按1对齐;起始offset=8 8%1=0;存放位置区间[8,D] */ };
成员总大小=15
2) 整体对齐 整体对齐系数 = min((max(int,short,char), 4) = 4 整体大小(size)=$(成员总大小) 按 $(整体对齐系数) 圆整 = 16 /*16%4=0*/
因此最终大小为 16
参考
struct test { int a; char b; short c; char d[6]; };
sizeof(fuck) = 16
完