我正在用 C 语言将应用程序移植到 ARM 平台,该应用程序也在 x86 处理器上运行,并且必须向后兼容。
我现在在变量对齐方面遇到了一些问题。我已经阅读了 gcc 手册,因为
__attribute__((aligned(4),packed))
我解释了所说的内容,因为结构的开头与 4 字节边界对齐,并且内部由于打包语句而保持不变。
最初我有这个,但偶尔它会与 4 字节边界不对齐。
typedef struct
{
unsigned int code;
unsigned int length;
unsigned int seq;
unsigned int request;
unsigned char nonce[16];
unsigned short crc;
} __attribute__((packed)) CHALLENGE;
所以我把它改成这个。
typedef struct
{
unsigned int code;
unsigned int length;
unsigned int seq;
unsigned int request;
unsigned char nonce[16];
unsigned short crc;
} __attribute__((aligned(4),packed)) CHALLENGE;
我之前所说的理解似乎是不正确的,因为结构现在与 4 字节边界对齐,内部数据现在与 4 字节边界对齐,但由于字节序,结构的大小在大小从 42 到 44 字节。这个大小很关键,因为我们有其他应用程序依赖于 42 字节的结构。
有人可以向我描述如何执行我需要的操作。任何帮助深表感谢。