首先由一个程序引入话题
为什么会出现那样的情况呢,
首先,先引入内存对齐的定义:
#pragma pack(n)
1. 对于结构体的各个成员,第一个成员在内存中的偏移位置为零,也就是说,从他开始存放数据。以后每一个成员的偏移量必须是min(#pragma pack(n)中指定的数,此数据自身长度) 的倍数。举个例子,第一个结构体中,char 型数据偏移量为0,第二个数据为int 型,占4个字节,在LINUX下默认#pragma pack(n) 中N为8 ,所以第二个数据成员的偏移量必须是8,4中较小的数的倍数,即4的倍数,所以就是4了。
2.在数据称原完成对齐后结构体也要完成对齐,对齐将按照 min (#pragma pack(n)中指定的数,结构体中数据长度最大的那个数据)对齐,最后的内存占用空间,应该是那个要对齐的倍数。
在第一个结构体旁边有笔者的分析,希望大家多多指点。