结构体对齐:
公式1:前面的地址必须是后面的地址正数倍,不是就补齐
公式2:整个Struct的地址必须是最大字节的整数倍
练习: Struct E1 { int a;char b; char c}e1;
第一地址肯定存放a是4Byte地址,
第二地址,b要1Byte的地址,
来欢迎公式一登场: 4 == 1*N (N等于正整数) 答"是"!地址现在为5Byte,下一个c要1Byte的地址同上,所以,就是6Byte。
来欢迎公式二登场,在这个E1中最大的字节是4,而我们的地址字节是6,4的整数倍不是6,所以,要加2Byte(总地址),So,整个字节为8!
CAUTION: 每个特定平台上的编译器都有自己的默认“对齐系数”。可以通过预编译命令#pragma pack(n)
struct simple_st
{
int a;
char b;
float c;
};
addr % sizeof()