Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2004-07-07

Re: Почему sizeof определяет размер структуры равным 4 байта

[07.07.2004 19:39] Обнаружено письмо от Victor V. Vakchturov
[07.07.2004 19:39] Тема "Почему sizeof определяет размер структуры равным 4
байта"

VVV> В VC выравнивание можно задать :
VVV> в меню Project/Settings...
VVV> вкладка C/C++ выбрать в комбобоксе Category "Code Generation"
VVV> В комбобоксе Struct member alignment выбрать 1.
А еще можно задать:
#pragma pack(push, ??)
struct ...
#pragma pack(pop)

Правильный синтаксис незнаю, без MSDN обходимся :)

С пожеланием доброго времени суток,
Олень Элмо

JabberID: da.el***@j*****.ru
gpg --keyserver pgp.mit.edu --search-keys da.el***@m*****.ru

Номер выпуска : 3385
Возраст листа : 289 (дней)
Количество подписчиков : 433
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/185966
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   Elmo 2004-07-07 17:03:31 (#185966)

Re: Почему sizeof определяет размер структуры равным 4 байта

Hi, Dm..

D> ---------------------(прог-а и рез-т)D> struct test
D> {
D> __int8 a1;
D> __int16 a2;
D> };

D> void main(void)
D> {
D> printf("%d",sizeof(test));
D> }

D> По идее д.б. результат 3, но sizeof возвращает 4,
D> как-будто в структуре два 16-и битных integer'а !

D> Объясните пожалуйста почему так???
Потому что в x86 память выделяется словами, а не байтами. Вывод: ставь
оба 16-битными, ничего не проиграешь.

<<-------------------------------------->>
"We live in deeds, not years: In thoughts not breaths; In feelings, not in figures
on a dial. We should count time by heart throbs. He most lives Who thinks most,
feels the noblest, acts the best." - Bailey, David

   "B." 2004-07-07 13:12:45 (#185783)

Re: Почему sizeof определяет размер структуры равным 4 байта

>> struct test {
>> __int8 a1;
>> __int16 a2;
>> };
> printf("%d",sizeof(test));
>
> Результат работы программы:
> 4
> Объясните пожалуйста почему так???
>
> Потому что, наверно, в проекте стоит по умолчанию выравнивание
> членов структур в 8 байт (или, в 4 или в 2).
> Если установить выравнивание в 1, то будет определяться
> размер 3.
>
Все так. Если точнее, правила выравнивания полей структуры такие (ANSI):
1. элементы структуры располагаются последовательно в порядке
их объявления
2. смещения элементов простых типов должны быть кратны
min(n,sizeof(e)), где sizeof(e) - размер элемента,
n - текущее ограничение выравнивания
3. выравнивание элементов типа struct и union определяется
максимальным значением выравнивания
их элементов

Ограничение выравнивания (1,2,4,8,...) устанавливается из
командной строки или прагмой, например:

#pragma pack(1)
...
#pragma pack()

Вторая строчка сбрасывает ограничение выравнивания
в установленное через командную строку.

Правила выравнивания для MSC почти полностью
соответствуют правилам ANSI, приведенным
выше. Аналогичные правила
используются в Delphi.

Номер выпуска : 3383
Возраст листа : 289 (дней)
Количество подписчиков : 433
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/185678
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-07-07 10:12:52 (#185678)

Re: Почему sizeof определяет размер структуры равным 4 байта

Здравствуйте !

> struct test
> printf("%d",sizeof(test));
> Результат работы программы:
> 4
> Объясните пожалуйста почему так???

Потому что, наверно, в проекте стоит по умолчанию
выравнивание членов структур в 8 байт (или, в 4 или в 2).
Если установить выравнивание в 1, то будет определяться
размер 3.

В VC выравнивание можно задать :
в меню Project/Settings...
вкладка C/C++ выбрать в комбобоксе Category "Code Generation"
В комбобоксе Struct member alignment выбрать 1.

Надо только удалить двоичные файлы и перекомпилить заново
(а то там с PCH конфликт будет).

--
С уважением, Вахтуров Виктор.

Номер выпуска : 3382
Возраст листа : 289 (дней)
Количество подписчиков : 432
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/185535
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-07-07 01:11:52 (#185535)

Почему sizeof определяет размер структуры равным 4 байта

Hello All,

---------------------(прог-а и рез-т)struct test
{
__int8 a1;
__int16 a2;
};

void main(void)
{
printf("%d",sizeof(test));
}
......................................................
Результат работы программы:
4
По идее д.б. результат 3, но sizeof возвращает 4,
как-будто в структуре два 16-и битных integer'а !

Объясните пожалуйста почему так???

   2004-07-07 00:30:57 (#185518)