Я пытаюсь создать упакованную структуру, которая представляет заголовок определенного пакета данных.Из-за этого у него не должно быть отступов, соответствующих размеру, указанному в спецификации.Однако в Windows он будет заполнен 1 байтом после последнего поля, независимо от того, как я скажу компилятору плотно упаковать структуру.
Я пробовал этот код в Compiler Explorer и на большинстве платформЯ получаю желаемый результат, кроме MSVC.Я также попробовал подсистему Windows для Linux (WSL) с GCC, которая снова дает мне правильный результат.У меня только проблемы с заполнением в Windows.
Упрощенная версия структуры выглядит следующим образом:
typedef struct
{
unsigned a : 10;
unsigned b : 1;
unsigned c : 5;
unsigned d : 8;
} __attribute__((packed)) A;
Использование MSVC:
#pragma pack(push, 1)
typedef struct
{
unsigned a : 10;
unsigned b : 1;
unsigned c : 5;
unsigned d : 8;
} A;
#pragma pack(pop)
В случае MSVC Iтакже попытался добавить параметр компилятора / Zp1 по умолчанию для выравнивания в 1 байт.
Я ожидаю, что размер структуры составит 3 байта.В Linux с gcc или clang это нормально, но в Windows с MinGW GCC или MSVC размер всегда составляет 4 байта.