Как члены структуры хранятся на машине с прямым порядком байтов? - PullRequest
5 голосов
/ 27 марта 2011
struct Dummy {
  int x;
  char y;
};

int main() {
  struct Dummy dum;
  dum.x = 10;
  dum.y = 'a';
}

Как будет выглядеть расположение элементов структуры на машине с прямым порядком байтов?

Было бы что-то вроде этого?

  0x1000  +0   +1   +2   +3
         ___________________
    x:  | 10 |  0 |  0 |  0 |     
         -------------------       
    y:  | 'a'|  0 |  0 |  0 |
         -------------------
  0x1000  +4   +5   +6   +7 

Ответы [ 3 ]

6 голосов
/ 27 марта 2011

Я думаю, вы найдете этот вопрос полезным. Порядковый номер обычно относится к слову в памяти, а не ко всей структуре.

4 голосов
/ 27 марта 2011

Структура структуры - это деталь реализации компилятора, на которую влияет упаковка по умолчанию. Порядковый номер обычно влияет только на порядок байтов в значении элемента структуры, а не в макете. Проверьте мелкий шрифт в руководстве по компилятору или используйте sizeof и смещение макроса для эксперимента.

Схема, задокументированная в вашем вопросе, действительно очень распространена для 32-битного компилятора LE.

1 голос
/ 27 марта 2011

Элементы структуры будут в объявленном порядке, с заполнением, вставленным по мере необходимости, чтобы каждое поле было правильно выровнено по своему типу, и с заполнением, вставленным по необходимости в конце, так, чтобы в массиве каждая последующая структура была правильно выровнена и начиналась немедленнопосле окончания предыдущей структуры.Также возможно (но маловероятно), что дополнительные ненужные отступы будут вставлены между любыми двумя элементами или в конце.

Каждое поле само будет сохранено в соответствии с типом в компиляторе и архитектуре, например, int10 будет храниться в виде байтов 0a 00 00 00 на обычной машине с прямым порядком байтов с 32-разрядными числами.

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