2014-05-11 2 views
1
struct struct_name { 
         char a; 
         char b; 
         char c; 
    } 

Размер структуры struct_name составляет 3, ноструктура обивка для charcter

struct struct_name1 { 
    char a; 
    char b; 
    char c; 
    int d; 
    char e; 
    char f; 
    char g; 
}; 

размер struct_name1 12 почему? Я знаю, что это из-за дополнения, но почему размер структуры stuct_name составляет 3 и поэтому структура SizeOf struct_name1 не 11.

+1

Посетите здесь [структура заполнения и структура упаковки] (http://stackoverflow.com/q/4306186/3293946) вы найдете это сообщение очень полезным ...! – Novice

ответ

1

Это все зависит от plaform, но при условии, относительно нормальную среду с 32-битной int с, что необходимо для выравнивания по 32-битным границам, эта структура должна быть кратной для 4 байтов. В противном случае, если вы попытаетесь создать массив из struct_name1, то int в середине не будет правильно выровнена (между элементами в массиве не может быть дополнений).

Если набор компилятора, который STRUCT до 11, и массив из двух из них будут выглядеть так:

abcXddddefgabcXddddefg // X is padding 
0 4 8 C F  // hex offset 

Вы видите первые байты второго int d находится по смещению 0x0F которым является 15 - не 4- байт выровнен. Так что дополнительный символ отступов добавлен:

abcXddddefgXabcXddddefgX // X is padding 
0 4 8 C 0 4  // hex offset 

и средний int всегда будет иметь правильное выравнивание.

Смежные вопросы