【IoT】STM32 编译指令 #pragma pack 的配对使用

举报
产品人卫朋 发表于 2021/10/29 23:42:11 2021/10/29
【摘要】 #pragma pack 可以用来指定数据结构的成员变量的内存对齐数值。 可选值为: 1、2、4、8、16。 使用 pack 指令要配对使用,以避免意外影响项目中其他源文件的结构成员的内存对齐。 如果影响了其他源文件的结构成员内存对齐,那么在你按照默认对齐来计算那些结构成员占用内存大小或者使用指针移动计算结构成员偏移位置的时候,...

#pragma pack 可以用来指定数据结构的成员变量的内存对齐数值。

可选值为:

1、2、4、8、16。
 

使用 pack 指令要配对使用,以避免意外影响项目中其他源文件的结构成员的内存对齐。

如果影响了其他源文件的结构成员内存对齐,那么在你按照默认对齐来计算那些结构成员占用内存大小或者使用指针移动计算结构成员偏移位置的时候,就可能会出现意料之外的异常。

主要可能的异常是内存定位错误或非法内存访问,结果可能导致错误的定位或数值,极端的情况下可能导致程序崩溃。

下面的例子用来展示基本的配对使用方式。

1)#pragma pack(n)的配对使用


  
  1. #pragma pack(1) //内存对齐设置为1个字节
  2. struct s1
  3. {
  4.   int i;
  5.   char c;
  6.   bool f;
  7. }
  8. struct s2{...}
  9. //...
  10. #pragma pack()   //恢复默认的内存对齐

2)#pragma pack(push|pop,n)的配对使用


  
  1. #pragma pack(push,1) //内存对齐设置为1个字节
  2. struct s3
  3. {
  4.   int i;
  5.   char c;
  6.   bool f;
  7. }
  8. struct s4{...}
  9. //...
  10. #pragma pack(pop)   //恢复默认的内存对齐


 

文章来源: blog.csdn.net,作者:简一商业,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/liwei16611/article/details/88941764

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。