结构体对齐预处理指令

来源:互联网 发布:深圳创意软件 编辑:程序博客网 时间:2024/06/06 20:35

使用方法:

方式一:

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

设置结构体按一个字节对齐,此时系统不再对结构体进行自动对齐,结构体中的成员占空间大小由自身的类型来决定,系统不再干预。

0 0
原创粉丝点击