我正在使用 ARM。由于奇数偏移量的读/写,我遇到了对齐错误(我们知道 ARM 是 4 字节对齐的)。我程序中定义的所有结构都是单字节对齐的,如
#pragma pack(push, 1)
typedef struct
{
char a1;
int a2;
char a3;
}a;
#pragma pack(pop)
我正在努力
#pragma pack(push, 1)
typedef struct
{
char a1 __attribute__ ((aligned (4)));
int a2;
char a3;
}a;
#pragma pack(pop)
gcc 属性 _attribute_ ((aligned (4))) 无效。
Note :: The above code is not my actual code. sample scenario.
所以我重新安排了结构成员来解决对齐问题。我想确定重新安排是否是可能的解决方案,或者我们是否可以让_属性_ 来处理这种情况。欢迎任何其他解决方案。提前致谢。
最佳答案
您可以在 ARM 的字节对齐结构中安全地读/写 char/int,编译器会注意对齐。对齐问题可能会出现一个问题,就是像这样转换为 32 位 int:
char buf[5];
char *p = buf + 1;
*((int *)p) = 1;
注意:如果出于某些原因,例如对齐某些成员(从结构的开头),您可以使用以下技巧:
typedef struct {
struct {} __attribute__ ((aligned (4)));
char a1; // offset is 4
int a2; // offset is 5
char a3; // offset is 9
} a;
关于c - 是否可以在单字节对齐结构中对齐特定结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11558371/