Podwójne wyrównanie
Po dyskusji zten post, Zrozumiałem, że głównym powodem wyrównania elementów struktury jest wydajność (i niektóre ograniczenia architektury).
Jeśli zbadamy Microsoft (Visual C ++), Borland / CodeGear (C ++ - Builder), Digital Mars (DMC) i GNU (GCC) podczas kompilacji dla 32-bitowego x86: wyrównanie dlaint
ma 4 bajty i jeśliint
nie jest wyrównany, może się zdarzyć, że zostaną odczytane 2 rzędy banków pamięci.
Moje pytanie brzmi: dlaczego nie robićdouble
być wyrównanym 4 bajtami? 4 bajty wyrównanedouble
spowoduje także odczyt 2 rzędów banków pamięci ....
Na przykład w poniższym przykładzie, ponieważdouble
jest 8-wyrównany, rzeczywisty rozmiar struktury będziesizeof(char) + (alignment for double padding) + sizeof(int) = 20 bytes
.
typedef struct structc_tag{
char c;
double d;
int s;
} structc_t;
Dziękuję Ci