Есть структура такого вида :
struct str
{
BYTE str1;
BYTE str2;
USHORT str3;
USHORT str4;
USHORT str5;
USHORT str6;
USHORT str7;
ULONG str8;
};
sizeof этой структуры, как мне кажется, должен быть равен 16.Но получается 10.Почему?
Заранее спасибо.
Здравствуйте, electron_, Вы писали:
_>Есть структура такого вида : _>struct str _>{ _> BYTE str1; _> BYTE str2; _> USHORT str3; _> USHORT str4; _> USHORT str5; _> USHORT str6; _> USHORT str7; _> ULONG str8; _>}; _>sizeof этой структуры, как мне кажется, должен быть равен 16.Но получается 10.Почему? _>Заранее спасибо.
что за типы BYTE , USHORT, ULONG ? ( ищи typedef )
скорее всего
BYTE 1 байт
USHORT 1 байт
ULONG 2 байта
то есть получаем сумма в 9-ть байт , но у тебя срабатывает выравниваени по полям
у тебя максимальный по размеру тип ULONG, значит вероятно что выравнивание будет по
2 байта, я так думаю str1 и str2 в первом 2-хбайтнике и т.д. а вот str7 один в двухбайтнике
поиграйся с этой структурой добавь в перемежку поля и увидишь результат
используй #pragma pack(1) или (push,1).
Возник ещё один вопрос,надеюсь не такой ламерский как прошлый.
Опять структура:
#pragma pack(push,1)
typedef struct str
{
USHORT str1;
USHORT str2;
ULONG str3;
...
}*pstr;
#pragma pack (pop)
pMem — какой-то адрес в памяти.
pstr mystr = (pstr)pMem;
mystr->str3 оказывается равен не 4 байтам ,следущими за str2,a 4 байтам отстающими от str2 на 4 байта.
Спасибо.