Witam
Dlaczego rozmiar tej struktury jest równy dwóm, a nie jednemu bajtowi?
struct EX{
unsigned short int ty : 4;
unsigned short int tR : 4;
};
short int X = sizeof (EX);
Witam
Dlaczego rozmiar tej struktury jest równy dwóm, a nie jednemu bajtowi?
struct EX{
unsigned short int ty : 4;
unsigned short int tR : 4;
};
short int X = sizeof (EX);
Bo short ma 2 bajty.
Jeśli chcesz, żeby ta struktura miała 1 bajt to zrób pola bitowe bazujące na unsigned char.
Zapewne dlatego, że wymagany alignment tej struktury to 2 w Twojej implementacji.
http://en.cppreference.com/w/cpp/language/object#Alignment
http://en.cppreference.com/w/cpp/language/alignof
Dziękuję za pomoc, problem rozwiązany.
Ja natomiast nie do końca rozumiem. Skoro określam, że jedno i drugie pole ma być wielkości 4 bitów, to wychodzi mi, że wielkość struktury ma być Bajt. Czyli, że jeśli układam w strukturze coś, to dalej muszę myśleć jak to robię? To po co określać pola bitowe w takim razie? Nie rozumiem koncepcji. Myślałem, że dzięki temu można ograniczyć/wyeliminować alignmentacje
@Nju
Ale określasz tylko, że pole którego używasz ma mieć po 4 bity. Zmienna dalej ma swoją wielkość - Ty tylko jakby ustaliłeś regułę do którego bitu pozwalasz jej używać.
Porównanie - auto czteroosobowe po wyjęciu siedzeń z tyłu nie stanie się mniejszym autem dwuosobowym :)
@xfin bo ok, ale do czego mogę w takim razie to stosować?
Nju napisał(a):
@xfin bo ok, ale do czego mogę w takim razie to stosować?
Do dzielenia zmiennej na więcej. Bo np masz takie zmienne, które będą zajmować 4 bity. Jeśli zużycie pamięci jest tutaj krytyczne to można trochę zaoszczędzić. Pola bitowe to po prostu ładnie opakowane wyłuskiwanie pojedynczych/kilku bitów ze zmiennej.