alinhamento de memória nas estruturas gcc
Estou portando um aplicativo para uma plataforma ARM em C, o aplicativo também é executado em um processador x86 e deve ser compatível com versões anteriores.
Agora estou tendo alguns problemas com o alinhamento variável. Eu li o manual do gcc para__attribute__((aligned(4),packed))
Interpreto o que está sendo dito à medida que o início da estrutura está alinhado com o limite de 4 bytes e o interior permanece intocado por causa da instrução compactada.
originalmente eu tinha isso, mas ocasionalmente ele é colocado desalinhado com o limite de 4 bytes.
typedef struct
{
unsigned int code;
unsigned int length;
unsigned int seq;
unsigned int request;
unsigned char nonce[16];
unsigned short crc;
} __attribute__((packed)) CHALLENGE;
então eu mudo para isso.
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;
O entendimento que afirmei anteriormente parece estar incorreto, pois agora a estrutura está alinhada com um limite de 4 bytes e os dados internos agora estão alinhados com um limite de quatro bytes, mas, devido à resistência, o tamanho da estrutura aumentou em tamanho de 42 a 44 bytes. Esse tamanho é crítico, pois temos outros aplicativos que dependem da estrutura ter 42 bytes.
Alguns poderiam descrever para mim como executar a operação que eu preciso. Qualquer ajuda é muito apreciada.