выравнивание элементов структуры - это можно предполагать отсутствие заполнения

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

struct Foo
{
    uint32_t a;
    uint16_t b;
    uint8_t c;
    uint8_t d;
    uint32_t e;
};

Правила выравнивания и заполнения элементов задокументированы для Visual C ++. sizeof (Foo) на VC ++ вышеупомянутая структура предсказуемо равна "12".

Я почти уверен, что правило состоит в том, что не следует делать никаких предположений о заполнении и выравнивании, но на практике делайте другие компиляторы в других операционных системах давать аналогичные гарантии?

Если нет, есть ли в GCC аналог «#pragma pack (1)»?

10
задан selbie 5 June 2011 в 09:18
поделиться