#pragma pack是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack指定数据在内存中的对齐方式。
#pragma pack (n) /*C编译器将按照n个字节对齐。*/
#pragma pack () /*取消自定义字节对齐方式。*/
#pragma pack (push,1) /*是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐*/
#pragma pack(pop) /*恢复对齐状态*/
1、push和pop可以使对齐恢复到原来状态,而不是编译器默认,可以说后者更优,有的时候两者差不多
如:
#pragma pack(push) //保存对齐状态
#pragma pack(3)//设定为4字节对齐
相当于 #pragma pack (push,3)
2、当设置当前对齐字节的上一个字节对齐状态不为4时,两者的区别就非常巨大。
因为#pragma pack () 是取消自定义字节对齐方式,也就是恢复默认的对齐方式,就是4字节对齐;但#pragma pack(pop) 是恢复上一个字节对齐的状态,上一次设置的字节对齐可能为1,或者2之类的。