【IoT】STM32 编译指令 #pragma pack 的配对使用
【摘要】
#pragma pack 可以用来指定数据结构的成员变量的内存对齐数值。
可选值为:
1、2、4、8、16。
使用 pack 指令要配对使用,以避免意外影响项目中其他源文件的结构成员的内存对齐。
如果影响了其他源文件的结构成员内存对齐,那么在你按照默认对齐来计算那些结构成员占用内存大小或者使用指针移动计算结构成员偏移位置的时候,...
#pragma pack 可以用来指定数据结构的成员变量的内存对齐数值。
可选值为:
1、2、4、8、16。
使用 pack 指令要配对使用,以避免意外影响项目中其他源文件的结构成员的内存对齐。
如果影响了其他源文件的结构成员内存对齐,那么在你按照默认对齐来计算那些结构成员占用内存大小或者使用指针移动计算结构成员偏移位置的时候,就可能会出现意料之外的异常。
主要可能的异常是内存定位错误或非法内存访问,结果可能导致错误的定位或数值,极端的情况下可能导致程序崩溃。
下面的例子用来展示基本的配对使用方式。
1)#pragma pack(n)的配对使用
-
#pragma pack(1) //内存对齐设置为1个字节
-
-
struct s1
-
{
-
int i;
-
char c;
-
bool f;
-
}
-
-
struct s2{...}
-
-
//...
-
-
#pragma pack() //恢复默认的内存对齐
2)#pragma pack(push|pop,n)的配对使用
-
#pragma pack(push,1) //内存对齐设置为1个字节
-
-
struct s3
-
{
-
int i;
-
char c;
-
bool f;
-
}
-
-
struct s4{...}
-
-
//...
-
-
#pragma pack(pop) //恢复默认的内存对齐
文章来源: blog.csdn.net,作者:简一商业,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/liwei16611/article/details/88941764
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)