大佬教程收集整理的这篇文章主要介绍了#pragma pack使用方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
参考文章: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()配合使用;
以上是大佬教程为你收集整理的#pragma pack使用方法全部内容,希望文章能够帮你解决#pragma pack使用方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。