Algumas arquiteturas alinharão dados em um determinado comprimento de palavra (dois bytes, quatro bytes, etc.) definindo assim essa estrutura em C:
struct sample {
int a;
char b;
}
Pode ter um tamanho de oito bytes, mesmo que você espere que sejam apenas cinco (quatro bytes para um e um para b). Isso garante que cada membro comece em uma posição múltipla de 4. E isso depende da arquitetura em que a compilação ocorre. Se precisar forçar a embalagem, você pode fazer isso:
#pragma pack(1)
struct sample {
int a;
char b;
}