c语言结构体字节对齐问题
2017-05-09 23:05
525 查看
定义一个结构体,如:
结构体 m_MessageHeader 的长度是:
这是结构体按照编译器默认的四字节对齐问题,而若实际中不需要字节对齐,而可以加入如下两行代码:
即结构体前后加上#pragma pack(1) 和#pragma pack(),括号中的1是按照一字节对齐,也可以2、3等
自己需求的字节对齐。
或者下面这种方式同样可以,结构体前后加上 __pragma(pack(push,1)) 和 __pragma(pack(pop))。
那么编译结果为:
typedef unsigned char uint8_t; typedef unsigned int uint32_t; typedef long long uint64_t; typedef struct { uint32_t crc; uint8_t msgID; float a; uint8_t b; uint64_t payload64[2]; } m_MessageHeader;
结构体 m_MessageHeader 的长度是:
这是结构体按照编译器默认的四字节对齐问题,而若实际中不需要字节对齐,而可以加入如下两行代码:
#pragma pack(1) typedef struct { uint32_t crc; uint8_t msgID; float a; uint8_t b; uint64_t payload64[2]; } m_MessageHeader; #pragma pack()
即结构体前后加上#pragma pack(1) 和#pragma pack(),括号中的1是按照一字节对齐,也可以2、3等
自己需求的字节对齐。
或者下面这种方式同样可以,结构体前后加上 __pragma(pack(push,1)) 和 __pragma(pack(pop))。
__pragma(pack(push,1)) typedef struct { uint32_t crc; uint8_t msgID; float a; uint8_t b; uint64_t payload64[2]; } m_MessageHeader; __pragma(pack(pop))
那么编译结果为:
相关文章推荐
- C语言结构体变量字节对齐问题总结
- C++中结构体的字节对齐问题 ---- 转
- 结构体和联合体的字节对齐问题
- 结构体的字节对齐(跨语言传参时尤为重要)
- C语言中结构体存储的一个字节对齐问题
- [zz]结构体字节对齐问题
- 结构体中的字节对齐问题
- 结构体字节对齐问题
- 结构体字节对齐问题
- 结构体、联合体的应用,以及字节对齐和字节序的问题
- C语言结构体内存对齐的问题
- 关于结构体字节对齐的问题
- 关于字节对齐-结构体对齐问题解决方法的确认
- c语言结构体数据对齐问题
- 结构体字节对齐问题
- 结构体字节对齐问题
- 结构体struct的成员变量字节对齐问题详解
- 关于结构体的长度问题(字节对齐)
- C语言结构体对齐问题详解
- ARM平台 结构体字节对齐引起的一个问题