Заполнение структур в C

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

Предположим, вам даны две структуры, такие как:

struct A {  
  int* a;  
  char b;  
 }  

и,

struct B {  
  char a;  
  int* b;  
}  

Итак какой бы вы предпочли и почему? Мой ответ был таким (хотя я несколько снимал в темноте), что предпочтение следует отдавать первой структуре, поскольку компилятор выделяет пространство для структуры в нескольких единицах размера слова (что является размером указателя - 4 байта на 32 битовые машины и 8 байт на 64-битных). Итак, для обеих структур компилятор выделит 8 байтов (если это 32-битная машина). Но в первом случае заполнение будет выполняться после всех моих переменных (то есть после a и b). Таким образом, даже если по какой-то причине b получает некоторое значение, которое переполняет и уничтожает мои следующие заполненные байты, но мой a все еще в безопасности.

Он казался не очень довольным и просил об одном недостатке первой структуры перед второй. Мне нечего было сказать. : D

Помогите, пожалуйста, с ответами.

40
задан nsane 12 May 2014 в 11:01
поделиться