Rozmiar struktury

0
 #include <stdio.h>
int main()
{
struct x_st{
char p;
int z;
short k;
};
printf("%d", sizeof(struct x_st));
return 0;
}

wypisuje mi ze ma 12 bajtow, a jak zamienie kolejnosc w strukturze (int na poczatku albo na koncu ) to daje 8 bajtow.
Z czego to wynika?
Uzywam Code blocksa 12

0

Wynika to z wyrównania struktur. http://en.wikipedia.org/wiki/Data_structure_alignment

0

To wiem, że rozmiar musi być podzielny przez najwiekszy rozmiar jaki mamy w str, ale wtym wypadku najwiekszy jest int ktory ma 4 bajty. wiec suma to 7 czyli struktura powinna miec 8 bajtow, a ma 12.

0

To przeczytaj to co jest w tym linku jeszcze raz, bo tam jest wyjaśnienie. Dokładniej to tu: http://en.wikipedia.org/wiki/Data_structure_alignment#Typical_alignment_of_C_structs_on_x86
Chodzi o to, że kolejność ma znaczenie, bo dodatkowe przesunięcia mogą być w środku struktury(tak żeby poszczególne jej pola miały konkretne wyrównanie). Na to trzeba uważać, żeby się nie przejechać np. przy przesyłaniu struktur przez sieć czy przy zapisie do pliku.

1

char p;
int z;
short k;

char p;
char NIC;
char NIC;
char NIC;
int z;
short k;
short NIC;

= 12

int z;
char p;
short k;

int z;
char p;
char NIC;
short k;

= 8

char p;
short k;
int z;

char p;
char NIC;
short k;
int z;

= 8

0

Dzięki ;)

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