Po zdefiniowaniu struktur, kompilator może dodawać paddings (spacje bez rzeczywistych danych), tak aby członkowie znajdowali się w granicach adresów, które są łatwiej dostępne dla procesora.
Na przykład na 32-bitowym procesorze 32-bitowe elementy powinny rozpoczynać się od adresów o rozmiarze 4 bajtów, aby uzyskać efektywny dostęp (odczyt i zapis). W poniższej definicji struktury dodaje wyściółkę 16 bitów pomiędzy oba elementy, tak że drugi człon mieści się w odpowiedniej granicy adres:
struct S {
int16_t member1;
int32_t member2;
};
Struktura pamięci powyższej strukturze, w architekturze 32-bitowe (~ = wyściółka)
+---------+---------+
| m1 |~~~~| m2 |
+---------+---------+
Jeżeli struktura jest pakowany, podkładki te nie są umieszczone. Kompilator musi wygenerować więcej kodu (który działa wolniej), aby wyodrębnić niepowiązane elementy danych, a także zapisać do nich.
taką samą strukturę, gdy pełne, pojawi się w pamięci jako coś w rodzaju:
+---------+---------+
| m1 | m2 |~~~~
+---------+---------+
Pytanie styczne, ale dlaczego ktoś miałby stworzyć spakowaną strukturę, jeśli powoduje spowolnienie? Czy to ogranicza ślad pamięci? – damned