Размер структуры с одним элементом

Учитывая

struct S {
  SomeType single_element_in_the_struct;
};

Всегда ли верно, что

sizeof(struct S) == sizeof(SomeType)

Или это может быть зависимым от реализации?

Ответ 1

Это будет обычно так, но это не гарантируется.

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

Ответ 2

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

раздел 6.7.2.1 в стандарте C99 гласит, что "В структурном объекте может быть не указано имя, но не в начале".

Это называется прокладкой структуры. Могут быть добавлены прокладки, чтобы убедиться, что структура правильно выровнена в памяти. Размер exakt структуры может измениться, если вы измените порядок своих членов.

Ответ 3

Это зависит от упаковки вашего компилятора. Обычно размер структуры делится на длину слова вашей системы (например, 4 байта == 32 бит).

Итак, вы часто будете sizeof(struct S) > sizeof(SomeType)

Для большинства компиляторов вы можете изменить размер упаковки, используя прагмы компилятора. Если вы установили #pragma pack(1) то размеры должны быть равны.