Почему C++ не делает структуру более узкой?

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

класс наивный {
общественности:
    char a;
    длинный длинный б;
    символ с;
    int d;
};

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

-------
BBBBBBBB
с --- дддд

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

Почему C++ не делает это более жестким, как

ас - дддд
BBBBBBBB

1 ответ

Решение

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

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

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

Другие вопросы по тегам