您的位置:首页 > 其它

结构体对齐预处理指令

2016-07-17 15:22 260 查看

使用方法:

方式一:

/*
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)


设置结构体按一个字节对齐,此时系统不再对结构体进行自动对齐,结构体中的成员占空间大小由自身的类型来决定,系统不再干预。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息