Ответ 1
Элементы класса и структуры требуются стандартом для хранения в памяти в том же порядке, в котором они объявлены. Таким образом, в вашем примере было бы невозможно, чтобы d
отображался до b
.
Кроме того, большинство архитектур предпочитают, чтобы многобайтовые типы выравнивались на границах 4 или 8 байтов. Таким образом, все, что может сделать компилятор, это оставить пустые байты заполнения между членами класса.
Вы можете минимизировать заполнение, переупорядочивая членов самостоятельно, увеличивая или уменьшая порядок размеров. Или у вашего компилятора может быть опция #pragma pack
или что-то подобное, что будет стремиться минимизировать заполнение при возможном расходе производительности и размера кода. Прочтите документы для своего компилятора.