结构体对齐预处理指令
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)
设置结构体按一个字节对齐,此时系统不再对结构体进行自动对齐,结构体中的成员占空间大小由自身的类型来决定,系统不再干预。
相关文章推荐
- C#语言基础――结构体和枚举类型全面解析
- C#中结构体和字节数组转换实现
- 解析结构体的定义及使用详解
- 全面了解结构体、联合体和枚举类型
- C语言中结构体struct编写的一些要点解析
- 详解C语言的结构体中成员变量偏移问题
- c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
- C++基础入门教程(三):数组、字符串、结构体、共用体
- C语言中结构体偏移及结构体成员变量访问方式的问题讨论
- 解析C语言中结构体struct的对齐问题
- 常用C/C++预处理指令详解
- 详解C语言结构体中的函数指针
- C/C++语言中结构体的内存分配小例子
- C#预处理指令之#line,#pragma warning 详细解析
- C#中使用反射获取结构体实例及思路
- 结构体类型数据作为函数参数(三种方法)
- Go语言里的结构体文法实例分析
- Go语言结构体定义和使用方法
- C#结构体特性实例分析
- 实例讲解C语言编程中的结构体对齐