结构体

如上结构体在定义的时候,内存如下变换

总大小32字节

调换次序后

还是32字节
有个结构体对齐

原则是这样的:
设对其值为ZP
结构体成员的地址和结构体首地址之差为offset
设结构体成员类型为member type
必须满足
offset % min(Zp, sizeof(member type)) == 0
定义结构体自身(它本身是个类型)对齐值为StructAlig

设整个结构体空间长度为size
满足

第一个

第一个就是0
第二个
原本对其是加六的位置,因为刚刚的那个前面五个字符。

然后开始往上加, x % 4 应该是8,所以从8开始
第三个
自然对其加12

现在应该是16
所以16开始

总共

所以其实大小应该是40,要对齐。

0
6
14
18
20
22
26
0
8
16
20
22
24
而像这样


里面包含一个结构体
先算出这里的size

然后用到tagStudent里面

这玩意可以改变编译选项
小范围改变

编译器角度 符号实际上就是带符号的变量地址
没有ngender 只是 +24即可
带指针直接加上偏移即可


可以做一个宏 取个巧
