[an error occurred while processing this directive] [an error occurred while processing this directive]
Закрывая дискуссию
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено nKam 11 апреля 2002 г. 20:59
В ответ на: Ответ: Вы несете откровенную чушь !!!!! отправлено trainer 10 апреля 2002 г. 18:02

1.
>typedef union {
> unsigned long AsLong;
> unsigned char AsBytes[sizeof(long)];
>} LongUnion;
>LongUnion myLong;
>myLong.AsLong; /* это как длинное целое */
>myLong.AsBytes[0] /* а это байт длинного целого, хранимый по младшему адресу */
А уверены что байт? Есть машины, где это 2 байта, а кое где даже 4 :)
В этом варианте работает.
В вашем первом примере я прицепился к тому, что вы складываете размеры элементов структуры, а правильно брать sizeof(my_struct).

Но сериализацию так не делают.
--**--
2.
И что мы получим в коде? Жуткое нагромождение директив условной компиляции + необходимость писать проблемный код много раз?
--**--
3.
Ага. Именно void* возвращается malloc.
Только это динамическое выделение памяти, что, мягко говоря, не быстро.
Если мы точно знаем сколько памяти нам понадобиться, но не знаем под что - тогда и применяем union - память выделяется статически и ровно столько, сколько нужно (если мы, конечно, не пытаемся запихать в union char и массив из пары сотен long).

ЗЫ: закрываем дискуссию. Я больше на эту ветку не ходок

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru