【发布时间】:2011-02-02 23:56:16
【问题描述】:
我正在用 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 字节的结构。
可以向我描述如何执行我需要的操作。非常感谢任何帮助。
【问题讨论】:
标签: c gcc memory-management arm gcc4