结论:
计算struct大小,就像玩俄罗斯方块。俄罗斯方块游戏界面的宽度=有效对齐值。
结构体或某成员变量的有效对齐值=min(结构体包含所有基本数据类型中最大sizeof大小(对包含的结构体是指其有效对齐值),指定对齐值)
指定对齐值为预编译阶段指定的值,如:#pragma pack(1)中的1
每一个变量,就像是一个俄罗斯方块,横线的那种,长度就是变量的长度。如果当前行还有空位放的下,就放下去,放不下就另起一行。每一行需要满足:每个变量相对于结构体起始位置的偏移量必须是该成员变量的有效对齐值(没规定则为该变量类型大小)的整数倍,不是整数倍空出内存,直到偏移量是整数倍为止。
正文:
华为面试遇到上面这一题,借此机会将struct字节对齐的知识点进行总结:
struct Test{
int a;
char b;
int d:8;
int e:14;
int f:23;
double g[10];
char h;
char* ptr
} test;
问64位系统下sizeof(test)的大小 // ans = 112
直接上经过我多次编程验证的结论 :