您现在的位置是:首页 > 编程语言 > 其他编程其他编程

#pragma pack使用方法

2021-05-15 22:28:08其他编程人已围观

简介参考文章:https://fanxinglanyu.blog.csdn.net/article/details/106616772 1 起因 在通信协议中使用定义通信帧结构体变量时,因为结构体中包含多

参考文章:https://fanxinglanyu.blog.csdn.net/article/details/106616772

1 起因

在通信协议中使用定义通信帧结构体变量时,因为结构体中包含多个变量,各自所占的字节数也不同,编译器会默认用对应最大字节数来编译各个变量。

这样会带来两个问题:

1)内存资源的浪费;

2)在通讯帧解析函数中,用sizeof函数来计算结构体所占字节数,不是实际的字节长度。

2 说明

使用#pragma pack(n)设定变量以n字节对齐时,存在两种形式:

1)n大于该变量所占字节数,偏移量使用默认的对齐方式;

2)n小于该变量所占字节数,偏移量为n的倍数。

3 demo

 1 #pragma pack (n)
 2 //等价于上面的 
 3 //#pragma pack(push,n)
 4 //作用:指定按n字节对齐
 5 struct A{
 6 char b;  //1 byte
 7 int a;   //4 bytes
 8 short c; //2 bytes
 9 };
10 //#pragma pack(pop)
11 //等价于下面
12 //作用:取消指定对齐,恢复缺省对齐
13 #pragma pack()

如果上面的是按1个字节对齐,那么sizeof(struct A)的值为7;

如果是编译器默认的方式,sizeof(struct A)的值为12。

注意:

1)#pragma pack(n)一定要与#pragma pack()配合使用;

2)一般令n=1,即#pragma pack(1)即可。

文章来源:https://www.cnblogs.com/feng-fei/p/14670435.html

Tags:使用方法 pragma pack 

很赞哦! ()

随机图文

文章评论

留言与评论(共有 0 条评论)
   
验证码:

本栏推荐

站点信息

  • 文章统计247968篇文章
  • 浏览统计18332次浏览
  • 评论统计1个评论
  • 标签管理标签云
  • 统计数据:统计代码
  • 微信公众号:扫描二维码,关注我们