выравнивание памяти в структурах gcc

Я портирую приложение на платформу ARM в C, приложение также работает на процессоре 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 байта.

Могли бы некоторые описать мне, как выполнить нужную мне операцию. Буду признателен за любую оказанную помощь.

Ответы на вопрос(6)

Ваш ответ на вопрос