Пожалуйста, обратите внимание на следующие типы:Выравнивание объектов составного типа в C90 и C99
typedef struct { char myArray[300]; } MyStruct;
typedef union { char myArray[300]; } MyUnion;
typedef struct { uint64_t x; } MyStruct2;
typedef union { uint64_t x; } MyUnion2;
typedef struct { uint64_t x; char myArray[300]; } MyStruct3;
typedef union { uint64_t x; char myArray[300]; } MyUnion3;
Я мог бы найти информацию о выравнивании и дополнения членов типов соединений, но я не уверен, что об объектах самого этих типов.
Какие правила выравнивания применяются к объектам этих типов в ОЗУ с использованием C90 и C99 на платформе X86? Может быть изменено выравнивание, например. потому что оптимизатор удаляет неиспользуемые элементы (особенно в союзах)?
Выравнивание объектов определяется реализацией. Вы должны использовать специальные атрибуты компилятора или _Alignas, если вы хотите установить определенное значение. – 2501
Таким образом, нет абсолютно никакого переносного способа гарантировать соответствие объекта (например, с использованием членов определенного размера и т. Д.)? – Silicomancer
_Alignas портативный, но это не C99. – 2501