Почему C++ не делает структуру более узкой?
Например, у меня есть class
,
класс наивный { общественности: char a; длинный длинный б; символ с; int d; };
и согласно моей программе тестирования, a
в d
построены один за другим, как
------- BBBBBBBB с --- дддд
-
означает неиспользованный.
Почему C++ не делает это более жестким, как
ас - дддд BBBBBBBB
1 ответ
Стандарт и класс требуют, чтобы члены сохранялись в памяти в том же порядке, в котором они были объявлены. Так что в вашем примере это было бы невозможно для d
появляться раньше b
,
Кроме того, большинство архитектур предпочитают, чтобы многобайтовые типы были выровнены по 4- или 8-байтовым границам. Поэтому все, что может сделать компилятор, - это оставить пустые байты заполнения между членами класса.
Вы можете свести к минимуму заполнение, переупорядочив элементы самостоятельно, в порядке увеличения или уменьшения размера. Или ваш компилятор может иметь #pragma pack
опция или что-то подобное, которая будет стремиться минимизировать заполнение за счет возможного снижения производительности и размера кода. Прочитайте документы для вашего компилятора.