Это все о атрибут и выравнивание слов в памяти
посмотри, пишешь ли ты
struct header
{
uint8_t version[ 2 ];
uint8_t flags;
uint32_t size;
};
, тогда linux и windows имеют размер 8
но если вы укажете атрибут, чтобы избежать мирового выравнивания по умолчанию, тогда
struct header
{
uint8_t version[ 2 ];
uint8_t flags;
uint32_t size;
} __attribute__((packed));
тогда в linux из-за размера attritube становится 7
см. В спецификации gcc сказано, что
If packed is used on a structure, or if bit-fields are used
it may be that the Microsoft ABI packs them differently than
GCC would normally pack them.