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