struct S {
SomeType single_element_in_the_struct;
};
Всегда ли верно, что
sizeof(struct S) == sizeof(SomeType)
Или это может быть зависимым от реализации?
Ответ 1
Это будет обычно так, но это не гарантируется.
Любая структура может иметь безымянные прописные байты в конце структуры, но они обычно используются для целей выравнивания, что не вызывает беспокойства, если у вас есть только один элемент.
Ответ 2
Он не должен быть равным из-за заполнения структуры.
Это называется прокладкой структуры. Могут быть добавлены прокладки, чтобы убедиться, что структура правильно выровнена в памяти.
Размер exakt структуры может измениться, если вы измените порядок своих членов.
Ответ 3
Это зависит от упаковки вашего компилятора. Обычно размер структуры делится на длину слова вашей системы (например, 4 байта == 32 бит).
Итак, вы часто будете
sizeof(struct S) > sizeof(SomeType)
Для большинства компиляторов вы можете изменить размер упаковки, используя прагмы компилятора.
Если вы установили
#pragma pack(1)
то размеры должны быть равны.