/* * 字节对齐:默认情况下,某个元素长度为n,它占用的开始地址就要从n的倍数开始 (地址从0x00开始) * 需要注意的是:最后总长度需要是最长元素的整数倍,比如t3,最后一个int在0x24到0x27,但由于最长的double是8字节,所以0x28到0x31也被用于对齐 * char: 1 * short: 2 * int: 4 * double: 8 * * 指定对齐长度时,按对齐长度对齐即可,如 #pragma pack(2) ,所有元素从0,2,4,6,8,10...开始即可 */struct t1 { // length: 16 char a; short b; int c; double d;};struct t2 { // 24 char a; short b; char e; int c; // 以上占12字节,0x00 ~ 0x11 double d; // double 8字节,从8的倍数开始,即从16开始,0x12 ~ 0x15不用};struct t3 { // 32 char a; // 0x00 ~ 0x01 short b; // 0x02 ~ 0x03 int c; // 0x04 ~ 0x07 double d; // 0x08 ~ 0x15 char e[5]; // 0x16 ~ 0x23 int x; // 0x 24 ~ 0x27,但长度要为最长元素d的整数倍,所以额外添加0x28~0x31用于对齐 // int x2; // 再加一个int,将占用0x28~0x31,长度32不变};