Представьте структуру, состоящую из 32-битных, 16-битных и 8-битных значений элементов. Где порядок значений членов таков, что каждый элемент находится на его естественной границе.
struct Foo
{
uint32_t a;
uint16_t b;
uint8_t c;
uint8_t d;
uint32_t e;
};
Правила выравнивания и заполнения элементов документированы для Visual С++. sizeof (Foo) на VС++ указанная выше структура предсказуемо "12".
Теперь я уверен, что правило состоит в том, что не следует делать предположения о заполнении и выравнивании, но на практике, делают ли другие компиляторы в других операционных системах аналогичные гарантии?
Если нет, есть ли эквивалент "#pragma pack (1)" на GCC?