gpt4 book ai didi

c - 是否可以在单字节对齐结构中对齐特定结构成员?

转载 作者:太空狗 更新时间:2023-10-29 11:20:00 28 4
gpt4 key购买 nike

我正在使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com