【发布时间】:2012-07-18 11:48:20
【问题描述】:
我正在使用 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.
所以我重新安排了结构成员来解决对齐问题。我想确保重新安排是否是可能的解决方案,或者我们可以让 _attribute_ 在这种情况下工作。欢迎任何其他解决方案。提前致谢。
【问题讨论】:
-
似乎#pragma 覆盖了_ 属性 。是否可以删除#pragma?并在必要时使用_ _attribute _ ((packed))?
-
我无法删除#pragma。我正在读取这样的 USB 数据。这些结构应该是单字节打包的。
-
好的,那么您可以只为这些 USB 结构设置 ((packed)) 属性,并删除 pragma。
-
结构的第一个成员从偏移量 0 开始,因此它必须与结构本身具有相同的对齐方式。
-
所以我不能在#pragma 中使用属性???
标签: c linux alignment arm structure