我们知道计算机系统对基本数据类型在内存中的存放是有一定限制的,通常我们会要求这些数据的首地址的值是某个数的倍数(4或8),这就是所谓的内存对齐。
而每个平台上的编译器都有着自己的“默认对齐系数”(32位机一般为4,64位机一般为8),但我们可以通过预编译命令#pragma pack(k),k = 1,2,4,8,16来改变这个系数,其中的k就是对齐系数;当然也可以使用#pragma pack()取消自定义字节对齐方式。
struct和union中的字节对齐通常是先局部对齐:数据的偏移地址是自身所占内存大小和对齐系数中较小的那个的倍数;全局对齐:总内存是最大数据结构所占内存和对齐系数中较小的那个的倍数,union是数据可重合。