Czy bitfield to koncepcja C, czy C++?Pytania dotyczące pól bitowych C
Czy można go używać tylko w obrębie struktury? Jakie są inne miejsca, z których możemy skorzystać?
AFAIK, bitfieldy są specjalnymi zmiennymi struktury, które zajmują pamięć tylko dla określonego nr. bitów. Jest to przydatne w oszczędzaniu pamięci i niczym więcej. Czy mam rację?
I kodowane mały program, aby zrozumieć wykorzystanie bitfields - Ale myślę, że to nie działa zgodnie z oczekiwaniami. Oczekuję, że rozmiar poniższej struktury będzie 1 + 4 + 2 = 7 bajtów (biorąc pod uwagę rozmiar niepodpisanego int to 4 bajty na mojej maszynie), ale ku mojemu zaskoczeniu okazuje się, że jest to 12 bajtów (4 + 4 + 4). Czy ktoś może mi powiedzieć, dlaczego?
#include <stdio.h>
struct s{
unsigned int a:1;
unsigned int b;
unsigned int c:2;
};
int main()
{
printf("sizeof struct s = %d bytes \n",sizeof(struct s));
return 0;
}
WYJŚCIE:
sizeof struct s = 12 bytes
Do niższego - którego z tych stwierdzeń nie zgadzasz? –
+1: Kluczem są "zależne od implementacji" i "unikaj bitfieldów". –
Częściowo się nie zgadzam w odniesieniu do oszczędności pamięci: nie krępuj się określać pola bitów, w których mogą zmniejszyć ślad pamięci struktury. Ale nigdy nie staraj się być z nimi sprytny i siedmiokrotnie nie licz na to, co zrobi kompilator. – dmckee