C / C ++: упаковка или заполнение данных в структуре - PullRequest
8 голосов
/ 02 апреля 2012

Я использую Code :: Blocks IDE с компилятором GNU GCC.

struct test
{
    char a;
    char e;
    char f;
    char b;
    char d;
};

sizeof(test) возвращает 5.

Я прочитал этот ответ: Почему sizeof для структуры не равен сумме sizeof каждого члена?

Почему после последнего char нет заполнения, так что sizeof(test) возвращает 6 или8?Есть еще тонны вопросов, которые я мог бы задать, добавив short, int и т. Д. Но я думаю, что этот вопрос пока хорош.Не облегчит ли процессор работу со структурой?

Ответы [ 2 ]

10 голосов
/ 02 апреля 2012

Выравнивание char - только 1, поэтому нет необходимости, чтобы структура была дополнена для соответствия большему требованию выравнивания.

1 голос
/ 02 апреля 2012

Поскольку в большинстве случаев вы работаете с одним членом за раз или передаете адрес структуры, компилятору не нужно выравнивать всю структуру больше, чем выравнивание, необходимое для ее членов. Это означает, что если вы назначите эту структуру (или передадите ее функции), процессору придется читать ее по элементам. (и это будет немного медленно).

...