2013-05-03 4 views
0

У меня есть структура, и я написал следующий код для печати размера структуры. Я получаю «8» как размер структуры, хотя ожидал «6». sizeof (int) + sizeof (char) + sizeof (char) = 4 + 1 + 1 = 6. И если я прокомментирую внутреннюю часть структуры, я получу желаемый результат (т. е. размер структуры как 2)Расчет структуры размера

I также распечатал размер int, который наступает 4.

typedef struct example 
{ 
    int one;  
    char two; 
    char three; 
}example; 

int main() 
{ 
    printf("value %d %d ",sizeof(example),sizeof(int)); 
} 
+0

Это связано с выравниванием, ваша структура находится в 4-байтовом порядке. http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member – birryree

+0

Таким образом, вы можете смело поместить структуру в массив и элемент 'int' будут правильно выровнены. – Bill

ответ

0

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

4

Компилятор будет несколько раз добавлять в отступы, чтобы сделать использование структуры более эффективным.

2

Представьте себе массив struct example.

Каждая запись в массиве должна быть sizeof(struct example) байт.

int, однако, всегда должен быть выровнен по 4 байт. 6 байтов не могут этого сделать, поэтому компилятор округляет размер до 8. Теперь каждый int в вашем массиве выравнивается.

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