alineación de memoria dentro de estructuras gcc

Estoy transfiriendo una aplicación a una plataforma ARM en C, la aplicación también se ejecuta en un procesador x86 y debe ser compatible con versiones anteriores.

Ahora tengo algunos problemas con la alineación variable. He leído el manual de gcc para__attribute__((aligned(4),packed)) Interpreto lo que se dice ya que el inicio de la estructura está alineado con el límite de 4 bytes y el interior permanece intacto debido a la declaración empaquetada.

originalmente tenía esto, pero ocasionalmente se coloca sin alinear con el límite 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;

entonces lo cambio a esto.

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;

El entendimiento que dije anteriormente parece ser incorrecto ya que tanto la estructura ahora está alineada con un límite de 4 bytes, y los datos internos ahora están alineados con un límite de cuatro bytes, pero debido a la endiabilidad, el tamaño de la estructura ha aumentado en tamaño de 42 a 44 bytes. Este tamaño es crítico ya que tenemos otras aplicaciones que dependen de que la estructura tenga 42 bytes.

¿Podría alguien describirme cómo realizar la operación que requiero? Cualquier ayuda es muy apreciada.

Respuestas a la pregunta(6)

Su respuesta a la pregunta