У меня есть код struct iof_header
в моем коде, и я определил, что он будет шириной 24 байта. Я выполняю sizeof (iof_header) и возвращает 32 байта в ширину.Как хранится структура в памяти?
Вопрос 1 Почему это ширина 32 байта вместо 24?
Вопрос 2 Включая его элементы, как хранится память в памяти?
Вопрос 3 Я нахожу в любое время я создаю один из моих структур, что байты [4-8 & 20-24] все NULL, я вижу это проявляется в моем массиве символов. Массив читается следующим образом: {4 bytes of BASEID_Code, 4 NULL bytes, 8 bytes of zeroed padding, 4 bytes of ASID_Code, 4 NULL bytes, 8 bytes of size}
На концах моих unsigned __int32
есть NULL байты, почему это происходит?
Возможно, это связано с компиляцией? Возможно ли эффективность, позволяющая процессору быстрее обрабатывать эти типы данных?
struct iof_header
{
union
{
struct
{
unsigned __int32 BASEID_Code;
unsigned __int64 padding;
union
{
char ASID_Type[4];
unsigned __int32 ASID_Code;
};
unsigned __int64 Size;
}header;
char header_c[24];
};
iof_header()
{
header.ASID_Code = 0;
header.BASEID_Code = 0;
header.Size = 0;
header.padding = 0;
}
};
Как может «объединение» чего-то и 'char [32]' иметь размер меньше 32 байтов? –
Пойдите, прочитайте это для exlanation -http: //en.wikipedia.org/wiki/Data_structure_alignment – OldProgrammer
Об этом спрашивали и ответили уже миллион раз. Все три вопроса. Который вы должны были разместить отдельно, если вообще. –