转自:(66条消息) 结构体sizeof不想字节对齐_lyw736632087的博客-优快云博客
问题描述:笔者在做一个项目:硬件要访问内存中按照Spec格式定义的一段数据包。在C语言中一般使用结构体初始化这个数据包,因为可以方便配置各个字段。但结构体默认需要字节对齐的(sizeof和实际大小不同),因此和内存真实的存放方式可能不同。
解决方法:让结构体按1字节对齐,例如:
struct test{
char ch;
int size;
char str[10];
}__attribute__ ((aligned (1)));
或者其等价形式:
struct test{
char ch;
int size;
char str[10];
}__attribute__ ((packed));
struct test mytest;
这样sizeof(mytest)=15。
————————————————
1、 attribute ((packed))的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。
2、 attribute ((aligned(n)))的作用就是告诉编译器在编译过程中按照n字节对齐。常常用来在结构体后面进行修饰。
本文探讨了如何在C语言中使用`__attribute__((aligned(1)))`和`__attribute__((packed))`来调整结构体的字节对齐,以便与内存布局保持一致,重点介绍了这两个特性的作用和应用实例。
1292

被折叠的 条评论
为什么被折叠?



