выравнивание памяти в структурах 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 байта.
Могли бы некоторые описать мне, как выполнить нужную мне операцию. Буду признателен за любую оказанную помощь.