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

questionAnswers(4)

yourAnswerToTheQuestion