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

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

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

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

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

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

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

ac--dddd
bbbbbbbb
28
задан Kevin Panko 18 July 2011 в 16:12
поделиться

1 ответ

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

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

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

56
ответ дан 28 November 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: