Почему заполнение в этом случае не происходит?
Как мне известно, по умолчанию будет выполнено 4-байтовое выравнивание. говорят
typedef struct
{
int data7;
unsigned char data8;
//3 -bytes will be added here.
}Sample1;
поэтому sizeof(Sample1)
будет 8.
Но для следующей структуры, почему заполнение не произошло?.
typedef struct
{
unsigned char data1;
unsigned char data2;
unsigned char data3;
unsigned char data4;
unsigned char data5;
unsigned char data6;
}Sample2;
Но sizeof (Sample2) равен 6. Этот Sample2 не является 4-байтовой выровненной структурой?
ИЗМЕНИТЬ::
Согласно Wiki
Согласование данных означает перенос данных со смещением памяти, равным нескольким кратным размеру слова, что увеличивает производительность системы из-за того, как процессор обрабатывает память.
Но члены Sample2 не будут выровнены по краям двух правильных
Спасибо.
Ответы
Ответ 1
Ни одно из полей вашей второй структуры не требует 4-байтного выравнивания. unsigned char
требуется только однострочное выравнивание. Следовательно, нет необходимости фактически выровнять его до 4 байтов.
Структуры обычно выравниваются только с максимальным выравниванием всех полей.
Ответ 2
data7
- это 4-байтовый элемент, поэтому компилятор обычно пытается выровнять его по адресу с кратным 4.
data1
является однобайтовым элементом, поэтому компилятор не пытается выровнять его с какой-либо конкретной границей (т.е. не будет никакого реального выигрыша от этого).
Ответ 3
Нет, в типичной реализации Sample2
не является структурой с 4-мя нотами. Это 1-байтовая выровненная структура.
В типичной реализации требование выравнивания всей структуры рассчитывается как максимум требования к выравниванию для его отдельных членов. Вот почему ваш Sample1
имеет требование выравнивания int
(4 на вашей платформе), а ваш Sample2
имеет требование выравнивания unsigned char
, которое равно 1.
Ответ 4
Char требует 1 байтового выравнивания. Максимальный тип данных - char, который является одним байтовым выравниванием, следовательно, вы получаете размер как "6".
Вы можете проверить этот сайт для большего понимания. http://www.geeksforgeeks.org/archives/9705.
Они подробно объяснили это.