Вопрос по sizeof
От: electron_  
Дата: 18.10.05 06:45
Оценка:
Есть структура такого вида :
struct str
{
BYTE str1;
BYTE str2;
USHORT str3;
USHORT str4;
USHORT str5;
USHORT str6;
USHORT str7;
ULONG str8;
};
sizeof этой структуры, как мне кажется, должен быть равен 16.Но получается 10.Почему?
Заранее спасибо.
Re: Вопрос по sizeof
От: Сергей Мухин Россия  
Дата: 18.10.05 06:46
Оценка: +1
Здравствуйте, electron_, Вы писали:

_>Есть структура такого вида :

_>struct str
_>{
_> BYTE str1;
_> BYTE str2;
_> USHORT str3;
_> USHORT str4;
_> USHORT str5;
_> USHORT str6;
_> USHORT str7;
_> ULONG str8;
_>};
_>sizeof этой структуры, как мне кажется, должен быть равен 16.Но получается 10.Почему?
_>Заранее спасибо.


0x10
---
С уважением,
Сергей Мухин
Re: Вопрос по sizeof
От: Bell Россия  
Дата: 18.10.05 06:51
Оценка: :)
Здравствуйте, 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.

ЗЫ
Если предположить, что sizeof(BYTE) == sizeof(USHORT) == 1 и sizeof(ULONG) == 2, то получаем 9 байт на сами поля, плюс байт на выравнивание.
Любите книгу — источник знаний (с) М.Горький
Re: Вопрос по sizeof
От: Шура Ренийский Украина  
Дата: 18.10.05 06:53
Оценка:
Здравствуйте, 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).
Re[2]: Вопрос по sizeof
От: electron_  
Дата: 18.10.05 06:53
Оценка:
Стормозил.Извиняюсь.
Re: Вопрос по sizeof
От: electron_  
Дата: 18.10.05 07:40
Оценка:
Возник ещё один вопрос,надеюсь не такой ламерский как прошлый.
Опять структура:
#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 байта.
Спасибо.
Re: Вопрос по sizeof
От: FoolS.Top Армения  
Дата: 18.10.05 07:58
Оценка:
Здравствуйте, electron_, Вы писали:

_>Есть структура такого вида :

_>struct str
_>{
_> BYTE str1;
_> BYTE str2;
_> USHORT str3;
_> USHORT str4;
_> USHORT str5;
_> USHORT str6;
_> USHORT str7;
_> ULONG str8;
_>};
_>sizeof этой структуры, как мне кажется, должен быть равен 16.Но получается 10.Почему?
_>Заранее спасибо.


10 или 0x00000010?
Feierlich, misterioso
Re[2]: Вопрос по sizeof
От: electron_  
Дата: 18.10.05 08:10
Оценка:
sizeof выдавал 0x10,а я,смотря под отладчиком, забыл про Hex.Вот и написал такое.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.