作者:张裕鹏 日期:2021-12-2

1. 结构体字节对齐

规则:

  1. 构体第一个成员所在的偏移地址为 0(即从 0 开始计)。
  2. 每个成员根据其类型或程序员指定的对齐字节数来判定它所在的偏移地址。如果该成员要求 4 字节对齐,那么它所处的偏移地址就应该是 4 的倍数,如果不是 4 的倍数,则向上取不小于当前偏移值的 4 的倍数的最小整数。
  3. 确定了当前成员对象的偏移地址之后,它的起始地址到前一个对象之间空白的存储空间用 0 来填充。
  4. 结构体对象的字节对齐要求与其成员中最大字节对齐要求相一致

2. 如何改变编译器的字节对齐方式

  1. pragma pack (n)

这句指令,指定编译器按照n个字节对齐方式来存放数据。这个会影响struct结构体的占用空间。

2、#pragma pack ()
使用默认的对齐方式。

3、根据程序需要,在适当的时候使用一种特别的n个字节对齐,然后恢复之前的对齐方式。
#pragma pack (push,n)
/do your work
#pragma pack(pop)

备注:推荐使用 3 说明的!比较安全,而且又能实现自己的需要。

参考:

C语言字节对齐[

](https://blog.csdn.net/qq_41811438/article/details/103198890)