【C++】关于结构体4字节对齐

网友投稿 240 2022-09-25

【C++】关于结构体4字节对齐

先看代码

#include //输入输出流using namespace std;#include //容器struct MyStruct{ unsigned char start1; unsigned char start2; unsigned char test1[7];};struct header{ unsigned char by; //1字节 unsigned int dw; //4字节 int flag; //4字节};typedef unsigned char UCHAR; //定义无符号字符变量的别名typedef unsigned int UINT; //定义无符号整型变量的别名const int PREAMBLE_LENGTH = 7; //定义整型常量,前导码占7个字节const int START_LENGTH = 1; //帧前定界符占1个字节const int DESADD_LENGTH = 6; //目的地址const int SOURCEADD_LENGTH = 6; //源地址const int TYPE_LENGTH = 2; //类型字段const int FCS_LENGTH = 4; //帧校验地址class MyFrame1{public: UCHAR preamble[PREAMBLE_LENGTH]; //前导码 UCHAR start; //帧前定界符,标明下一个字节为目的MAC字段 UCHAR dest_add[DESADD_LENGTH]; //指明帧的目的地址 UCHAR source_add[SOURCEADD_LENGTH]; //指明帧的源地址 UCHAR type[TYPE_LENGTH]; //帧中数据的协议类型 vector data; //vector 占16字节 定义数据的容器存储数据字段 UCHAR fcs[FCS_LENGTH]; //帧校验序列};int main(){ MyStruct struct1; cout << sizeof(struct1)<

以上代码我定义了2个结构体,1个类,类的本质也是结构体。因为运行环境是32位,所以在用sizeof计算结构体或者类的大小时,可能会出现字节对齐的现象,就是sizeof的结果是4的整数倍,从下图中可以看到struct1结构体变量没有发生字节对齐,而str1结构体变量和fram1类对象的统计大小时,均发生了字节对齐现象(str1结构体变量定义了9个字节,对齐到12字节,而MyFrame类原本占42字节,对齐到44字节)

不想让结构体自动对齐怎么办

在头文件当中添加​​#pragma pack(1)​​即可

#include //输入输出流using namespace std;#include //容器#pragma pack(1) #按1个字节对齐,这样相当于就没有内存对齐

添加之后的结果

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:三星发帖嘲讽苹果不送插头:Galaxy会向用户提供一切!
下一篇:【笔试题目】快手2019年秋招测试B卷
相关文章

 发表评论

暂时没有评论,来抢沙发吧~