Структурное распределение памяти, распределение памяти должно быть кратным 4 - PullRequest
0 голосов
/ 06 сентября 2018
struct x
{
  char b;
  short s;
  char bb;
};


int main()
{
 printf("%d",sizeof(struct x));
}

Вывод: 6

Я запускаю этот код на 32-битном компиляторе. вывод должен быть 8 байтов.

Мое объяснение -> 1. Символу требуется 1 байт, а следующий короткий занимает кратное 2, поэтому такой короткий создает заполнение 1 и занимает 2 байта, здесь 4 байта уже выделены. Теперь единственный левый член-символ занимает 1 байт, но поскольку объем выделяемой памяти кратен 4, общий объем памяти составляет 8 байт.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Структура памяти struct C полностью зависит от реализации, и вы не можете предполагать все это.

Кроме того, в типичном выравнивании C структура выглядит следующим образом:

struct MyData
{
    short Data1;
    short Data2;
    short Data3;
};

также будет иметь sizeof = 6, потому что если тип «short» хранится в двух байтах памяти, то каждый элемент структуры данных, изображенной выше, будет выровнен на 2 байта. Data1 будет со смещением 0, Data2 со смещением 2 и Data3 со смещением 4. Размер этой структуры будет 6 байтов.

См. https://en.wikipedia.org/wiki/Data_structure_alignment

0 голосов
/ 06 сентября 2018

Требование выравнивания структуры - это требование элемента с максимальным выравниванием. Максимальное выравнивание здесь для short, поэтому, вероятно, 2. Следовательно, два для b, два для s и два для bb дают 6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...