Почему С++ не упрощает структуру?

Например, у меня есть class,

class naive {
public:
    char a;
    long long b;
    char c;
    int d;
};

и в соответствии с моей программой тестирования a до d строятся один за другим, например

a-------
bbbbbbbb
c---dddd

- означает неиспользованный.

Почему С++ не делает его более жестким, например

ac--dddd
bbbbbbbb

Ответ 1

Элементы класса и структуры требуются стандартом для хранения в памяти в том же порядке, в котором они объявлены. Таким образом, в вашем примере было бы невозможно, чтобы d отображался до b.

Кроме того, большинство архитектур предпочитают, чтобы многобайтовые типы выравнивались на границах 4 или 8 байтов. Таким образом, все, что может сделать компилятор, это оставить пустые байты заполнения между членами класса.

Вы можете минимизировать заполнение, переупорядочивая членов самостоятельно, увеличивая или уменьшая порядок размеров. Или у вашего компилятора может быть опция #pragma pack или что-то подобное, что будет стремиться минимизировать заполнение при возможном расходе производительности и размера кода. Прочтите документы для своего компилятора.