使用方法:
方式一:
/*
n可以取以下5个数中的任意一个:1,2,4,8,16
来自定义结构体成员的对齐方式
*/
#pragma pack(n)
//这里放置结构体
#pragma pack ()//取消自定义字节对齐方式
方式二:
/*
n可以取以下5个数中的任意一个:1,2,4,8,16
来自定义结构体成员的对齐方式
*/
#pragma pack(push,n)
//这里放置结构体
#pragma pack(pop) //编译器到编译到此处时将恢复原来的对齐状态
------------注意--------------
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为4字节对齐
相当于 #pragma pack(push,4)
默认状态下,系统会自动对结构体进行对齐
typedef struct userInfo{
char a; //4字节
int b; //4字节
short c;//2字节
char d; //1字节
char e; //1字节
} YF_userInfo;
以上结构体的总大小是12字节,其中第一个char型本应该是1个字节的,但是系统为了提高性能,对结构体进行了对齐,使其拥有4个字节的空间大小。
添加字节对齐
#pragma pack(push,1)
typedef struct userInfo{
char a; //1字节
int b; //4字节
short c;//2字节
char d; //1字节
char e; //1字节
} YF_userInfo;
#pragma pack(pop)
设置结构体按一个字节对齐,此时系统不再对结构体进行自动对齐,结构体中的成员占空间大小由自身的类型来决定,系统不再干预。