Двойное выравнивание

После обсуждения из этого поста я понял, что основной причиной выравнивания членов структуры является производительность (и некоторые ограничения архитектуры).

Если мы исследуем Microsoft (Visual C++), Borland/CodeGear (C++-Builder), Digital Mars (DMC) и GNU (GCC) при компиляции для 32-битной x86: выравнивание для intсоставляет 4 байта, и если intне выровнено, может случиться так, что будут прочитаны 2 строки банков памяти.

Мой вопрос: почему бы не сделать двойнымвыравниванием по 4 байтам? 4 байта, выровненные double, также приведут к чтению 2 строк банков памяти....

Например, в следующем примере, поскольку doubleвыровнено по 8, фактический размер структура будет иметь вид sizeof(char) + (выравнивание для двойного заполнения) + sizeof(int) = 20 байтов.

typedef struct structc_tag{
    char        c;
    double      d;
    int         s;
} structc_t;

Спасибо

8
задан Community 23 May 2017 в 12:02
поделиться