pragma pack
От: tavwizard Беларусь  
Дата: 06.08.03 09:10
Оценка:
есть небольшой код на VC++ 6.0


#pragma pack (push, 1)

enum E1
{
    e11,
    e12
};

enum E2 
{
    e21,
    e22
};

struct S1
{
    E1 e1:2;
    E2 e2:2;
    BYTE b1:1;
    BYTE b3:3;
};

#pragma pack (pop)


вроде все просто, но почему структура S1 занимает 5 байт? Т.е. енумы выравниваются на 4 байта (e1 — первые 2 бита первого байьа, e2 — следующие 2 бита первого байта, b1 — первый бит 5 байта, b2 — 3 следующих бита 5 байта)

это так и должно быть?
Re: pragma pack
От: e-Xecutor Россия  
Дата: 06.08.03 10:56
Оценка: 2 (1)
Здравствуйте, tavwizard, Вы писали:

T>есть небольшой код на VC++ 6.0



T>
T>#pragma pack (push, 1)

T>enum E1
T>{
T>    e11,
T>    e12
T>};

T>enum E2 
T>{
T>    e21,
T>    e22
T>};

T>struct S1
T>{
T>    E1 e1:2;
T>    E2 e2:2;
T>    BYTE b1:1;
T>    BYTE b3:3;
T>};

T>#pragma pack (pop)
T>


T>вроде все просто, но почему структура S1 занимает 5 байт? Т.е. енумы выравниваются на 4 байта (e1 — первые 2 бита первого байьа, e2 — следующие 2 бита первого байта, b1 — первый бит 5 байта, b2 — 3 следующих бита 5 байта)


T>это так и должно быть?


hint: sizeof(E1)==sizeof(E2)==4
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.