#pragma pack 可以用来指定数据结构的成员变量的内存对齐数值。

可选值为:

1、2、4、8、16。

使用 pack 指令要配对使用,以避免意外影响项目中其他源文件的结构成员的内存对齐。

如果影响了其他源文件的结构成员内存对齐,那么在你按照默认对齐来计算那些结构成员占用内存大小或者使用指针移动计算结构成员偏移位置的时候,就可能会出现意料之外的异常。

主要可能的异常是内存定位错误或非法内存访问,结果可能导致错误的定位或数值,极端的情况下可能导致程序崩溃。

下面的例子用来展示基本的配对使用方式。

1)#pragma pack(n)的配对使用

#pragma pack(1) //内存对齐设置为1个字节

struct s1
{
  int i;
  char c;
  bool f;
}

struct s2{...}

//...

#pragma pack()   //恢复默认的内存对齐

2)#pragma pack(push|pop,n)的配对使用

#pragma pack(push,1) //内存对齐设置为1个字节

struct s3
{
  int i;
  char c;
  bool f;
}

struct s4{...}

//...

#pragma pack(pop)   //恢复默认的内存对齐