Rozmiar struktury

0

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);
1

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.

3

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

0

Dziękuję za pomoc, problem rozwiązany.

0

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

3

@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 :)

0

@xfin bo ok, ale do czego mogę w takim razie to stosować?

0
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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1