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.

questionAnswers(6)

yourAnswerToTheQuestion