主要讲解例子
offsetof #include<srddef.h>
返回一个成员在其结构体起始位置的偏移量(字节)
右边是偏移量0-12
定义结构体变量s,
①第一个成员c1占偏移量为0字节的空间(深红色)
②第二个成员 i 自身大小4字节,默认对齐数8, 4 和 8较小值4作为对齐数,则i需要对齐到4的整数倍的空间开始,则从偏移量为4的空间往后依次占4个字节(绿色部分)
③第三个成员c2自身大小1字节,默认对齐数8, 1 和 8较小值1作为对齐数,则 c2 需要对齐到1的整数倍的空间开始,任何偏移量的空间都是1的整数倍,则直接在 i 挨着的下面一个空间占用一个字节(蓝色部分)
则此时整个结构体的大小为0~8,9个字节空间,结构体的总大小需要是最大对齐数的整数倍,最大对齐数是三个对齐数1 4 1中的4,则结构体的总大小是4的倍数,则让 9 再浪费三字节空间到了偏移量11的位置,总共12字节空间