Eu estava lendo a documentação do GNU/GCC e parei na descrição do __attribute__ ((packed))
. Diz:
embalado
O atributo compactado especifica que um campo de variável ou estrutura deve ter o menor alinhamento possível – um byte para uma variável e um bit para um campo, a menos que você especifique um valor maior com o atributo alinhado.
Aqui está uma estrutura na qual o campo x é compactado, de modo que segue imediatamente a:
struct foo { char a; int x[2] __attribute__ ((packed)); };
Gostaria de saber como esse atributo funciona exatamente e se esse código:
struct bar
{
char a:1 __attribute__ ((packed));
};
criaria uma estrutura de 1 bit em vez de 1 byte.
Um byte é a menor unidade endereçável. Como tal, as estruturas só podem ocupar um número inteiro de bytes, não bytes fracionários.
Quaisquer bits não utilizados em campos de bits (ou mais precisamente, nas unidades de armazenamento que contêm campos de bits) tornam-se preenchimento.
Portanto, no seu exemplo
struct bar
, o tamanho da estrutura ainda será 1, com 1 bit usado e 7 bits não usados.