Struct içinde herbir veri tipi hafızada kendi boyutuna bölünen bir adreste başlar (başlangıçtan sayıldığında). Bu yüzden struct oluştururken bileşenleri hizalamak (alignment) için dolgu (padding) kullanılır. Yukarıda k1
için bu şöyle işler:
char
1 byte
- 7 byte dolgu
double
8 byte
int
4 byte
- 4 byte dolgu
Toplamda 24 byte çıkar. Aynı bileşenleri aşağıdaki gibi sıralasaydık
struct k3{ double b;
int c;
char a;
};
bu sefer
double
8 byte
int
4 byte
char
1 byte
- 3 byte dolgu
olur ve boyut 16 olurdu.
Union veri tipinin boyu ise icindeki en buyuk veri tipinin boyuna esittir. Union veri tipinin slotlarina ayni anda ulasamazsiniz ama struct veri tipinde bunu yapabilirsiniz. Kodunuzdaki k2 bu nedenle 8 cikti.