После обсуждения из этого поста я понял, что основной причиной выравнивания членов структуры является производительность (и некоторые ограничения архитектуры).
Если мы исследуем 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;
Спасибо