结构体成员属性偏移对齐
我们看如下列子,并考虑结构体每个成员属性偏移
然后我们查看内存结构:我们惊讶的差异在
name
之后空出了3个字节内存 cc
,而在 gender
到 height
内存结构中同样也多出了3个字节的 cc
.一个多出了6个空白字节,那么加上固有的26字节那么这个结构体共占用 32
字节。
造成这样的现象是由于c存在结构体对齐机制引起的,在编译参数由 Zp1,Zp2,Zp4,Zp8,Zp16
控制。比如 Zp1
为对齐大小为1, Zp8
为8字节对齐。默认为 Zp8
。
上述的例子如果想输出26只需要修改编译参数为 Zp1
即可。
结构体对齐作用(1):控制的是每个成员属性对于 结构体初始地址的偏移
。
假设结构体对齐大小为N,结构体成员为Y,