Двойное выравнивание
После обсуждения сэта почтаЯ понял, что основной причиной выравнивания элементов структуры является производительность (и некоторые архитектурные ограничения).
Если мы будем исследовать Microsoft (Visual C ++), Borland / CodeGear (C ++ - Builder), Digital Mars (DMC) и GNU (GCC) при компиляции для 32-битной x86: выравнивание дляint
4 байта и еслиint
не выровнен, может случиться так, что будут прочитаны 2 ряда банков памяти.
Мой вопрос, почему бы не сделатьdouble
быть выровненными также 4 байта? 4 байта выровненыdouble
также вызовет 2 строки чтения банков памяти ....
Например, в следующем примере, так какdouble
выровнен по 8, фактический размер структуры будетsizeof(char) + (alignment for double padding) + sizeof(int) = 20 bytes
.
typedef struct structc_tag{
char c;
double d;
int s;
} structc_t;
Спасибо