Это вопрос для собеседования. До сих пор я думал, что такие вопросы зависят исключительно от компилятора и не должны меня беспокоить, но теперь мне это довольно любопытно.
Предположим, вам даны две структуры, такие как:
struct A {
int* a;
char b;
}
и,
struct B {
char a;
int* b;
}
Итак какой бы вы предпочли и почему? Мой ответ был таким (хотя я несколько снимал в темноте), что предпочтение следует отдавать первой структуре, поскольку компилятор выделяет пространство для структуры в нескольких единицах размера слова (что является размером указателя - 4 байта на 32 битовые машины и 8 байт на 64-битных). Итак, для обеих структур компилятор выделит 8 байтов (если это 32-битная машина). Но в первом случае заполнение будет выполняться после всех моих переменных (то есть после a и b). Таким образом, даже если по какой-то причине b получает некоторое значение, которое переполняет и уничтожает мои следующие заполненные байты, но мой a все еще в безопасности.
Он казался не очень довольным и просил об одном недостатке первой структуры перед второй. Мне нечего было сказать. : D
Помогите, пожалуйста, с ответами.