Rozmiar struktury

Kamil9132
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 173
0

Witam
Dlaczego rozmiar tej struktury jest równy dwóm, a nie jednemu bajtowi?

Kopiuj
struct EX{

	unsigned short int ty : 4;
	unsigned short int tR : 4;


};
	short int X = sizeof (EX);
Sopelek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 467
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.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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

Kamil9132
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 173
0

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

NJ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 39
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

xfin
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Genewa
  • Postów: 597
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 :)

NJ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 39
0

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

Sopelek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 467
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.