|
структуры в С, копирование в байтовый массив |
|
|
|
 |
Ответов
|
Apr 29 2007, 15:21
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(lks) Когда вы извлекаете адрес переменной с помощью оператора амперсанд - вы получаете адрес переменной. Вы знаете тип переменной? Простая процедура. Этот тип не требует описание его в "хидере". Это не термин - это просто обычный указатель, поддерживаемый стандартными процедурами. Ну я уже не знаю как вам объяснять.  На гайках и автомобилях не понимаете, на яблоки, арбузы и семячки перейти что ли? Указатель в СИ это такая же абстракция как и структура. Поведение указателя после компиляции программы в машинные коды, выполняемые CPU, зависит от конкретного CPU. Если CPU обращается к памяти побайтно, то нет никаких проблем, чтобы адресовать каждый байт. Но если разрядность шины памяти шире 8 бит, то возникают нюансы. На языке ассемблера разница выразится, например в том, что вместо команды MOV.W 0x8(R10), R14 будет использоваться команда MOV.B 0x8(R10), R14. В 16-битной архитектуре такая команда позволяет получить доступ к байту, в отличие от доступа к слову "по-умолчанию". Если в такой системе структура будет иметь выравнивание на байт, то есть вероятность 50/50, что вы обязательно налетите на глюки при использовании "словного" (16-битного) доступа к такой структуре. Причем это даже при доступе к массиву однородных данных относится. Пример. unsigned char mas[5]={0x00, 0x01, 0x02, 0x03, 0x04}; Вне зависимости от архитектуры и способа доступа к памяти байты могут расположится в памяти в порядке как 0x00, 0x01, 0x02, 0x03, 0x04, это нам гарантирует стандарт СИ. Однако извлечение их из памяти будет зависеть от описания способа доступа к памяти, т.к. в физической памяти первый байт массива может расположиться по нечетному адресу, который 16-разрядный CPU напрямую адресовать не может, т.к. у него счетчик (PC) кратно слову (2 байтам) инкрементируется, а не кратно 1 байту. Тогда при извлечении из физической памяти такого массива с 16-разядным доступом мы можем получить двоякий результат 0x00XX, 0x0201, 0x0403 или 0x0100, 0x0302, 0xXX04. Вот к чему может привести свободное манипулирование типами данных.
|
|
|
|
|
Apr 29 2007, 16:43
|
Местный
  
Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143

|
Цитата(rezident @ Apr 29 2007, 16:21)  Ну я уже не знаю как вам объяснять.  На гайках и автомобилях не понимаете, на яблоки, арбузы и семячки перейти что ли? Указатель в СИ это такая же абстракция как и структура. На семячках вы еще не упражнялись.  Если я напишу массив указателей unsigned char *buf[100]; - это абстракция? Если я напишу struct и перечислю список переменных - это тоже? Вообще-то компилятор выделит память под эти переменные - а память стоит денег - значит вещи вполне реальные.  Цитата(zltigo @ Apr 29 2007, 16:54)  Обалдеть  . Все, граждане-господа-товарищи, я "пас"  . Возраст, нервы... Если бы память позволяла - я бы поставил scanf со списком переменных и читал бы все из буфера, но это занимает памяти еще больше.
|
|
|
|
|
Apr 29 2007, 17:10
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(lks @ Apr 29 2007, 16:34)  Если я напишу struct и перечислю список переменных - это тоже? Вообще-то компилятор выделит память под эти переменные - а память стоит денег - значит вещи вполне реальные.  О какие тараканы в голове. Не выделит, если не будете перечислять список переменных. Объявление структуры, не содержащей списка переменных, не резервирует памяти, только описывает шаблон. Если структура имеет тег, то этим тегом далее можно пользоваться при определении структурных объектов - это то, что надо. P.S. Для тех, кто в танке - список переменных это то, что после закрывающейся фигурной скобки, а не внутри скобок. Цитата(rezident @ Apr 29 2007, 16:49)  Пожалуй мне тоже придется последовать примеру zltigo и самоустраниться... Не смог я  страсть к естествознанию не позволила
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
tolik_zp структуры в С Apr 26 2007, 16:05 o-henry код в студию Apr 26 2007, 16:10 tolik_zp Цитата(o-henry @ Apr 26 2007, 16:10)... Apr 26 2007, 16:16  o-henry а приведение типов кто делать будет?
ptr = (char*... Apr 26 2007, 16:30  dxp Цитата(tolik_zp @ Apr 26 2007, 20:16) вот... Apr 26 2007, 16:32  lks Попробуйте указать на переменную JmpCmd - т.е. ам... Apr 26 2007, 20:30   Сергей Борщ Цитата(lks @ Apr 26 2007, 19:30) Попробуй... Apr 26 2007, 22:25    lks Цитата(Сергей Борщ @ Apr 26 2007, 23:25) ... Apr 26 2007, 23:10     Сергей Борщ Цитата(lks @ Apr 26 2007, 22:10) Вопрос г... Apr 27 2007, 00:52   zltigo Цитата(lks @ Apr 26 2007, 20:30) а на пер... Apr 26 2007, 23:19 v_shamaev Цитата(tolik_zp @ Apr 26 2007, 17:05) Име... Apr 26 2007, 16:10 zltigo Цитата(tolik_zp @ Apr 26 2007, 16:05) поп... Apr 26 2007, 16:16 rezident Об чем сыр-бор? Явное приведение типов всяко лучше... Apr 27 2007, 01:40 tolik_zp всем спасибо, работает. век живи - век rtfm Apr 27 2007, 12:23  lks Цитата(tolik_zp @ Apr 27 2007, 13:23) все... Apr 27 2007, 18:45   zltigo Цитата(lks @ Apr 27 2007, 18:45) Приведит... Apr 27 2007, 18:57    lks Цитата(zltigo @ Apr 27 2007, 19:57) Для с... Apr 27 2007, 19:53     zltigo Цитата(lks @ Apr 27 2007, 19:53) Ну может... Apr 27 2007, 20:06 sergeeff К сведению: union - платформозависимая штука и в п... Apr 27 2007, 21:01 zltigo Цитата(sergeeff @ Apr 27 2007, 21:01) К с... Apr 27 2007, 21:14  lks Цитата(zltigo @ Apr 27 2007, 22:14) В пла... Apr 27 2007, 22:27   zltigo Цитата(lks @ Apr 27 2007, 22:27) Проблемы... Apr 27 2007, 23:05    lks Цитата(zltigo @ Apr 28 2007, 00:05) Лично... Apr 28 2007, 08:12     dxp Цитата(lks @ Apr 28 2007, 12:12) А всеже ... Apr 28 2007, 09:56      lks Цитата(dxp @ Apr 28 2007, 10:56) Поясните... Apr 28 2007, 11:11       o-henry Цитата(lks @ Apr 28 2007, 10:11) Этот при... Apr 28 2007, 11:53        lks Цитата(o-henry @ Apr 28 2007, 12:53)... Apr 28 2007, 12:58         Сергей Борщ Цитата(lks @ Apr 28 2007, 11:58) Может ну... Apr 28 2007, 13:28       zltigo Цитата(lks @ Apr 28 2007, 11:11) Никто не... Apr 28 2007, 12:09       Сергей Борщ Цитата(lks @ Apr 28 2007, 10:11) Вопрос в... Apr 28 2007, 12:46       dxp Цитата(lks @ Apr 28 2007, 15:11) Значок ... Apr 28 2007, 14:01        lks Цитата(dxp @ Apr 28 2007, 15:01) Неверно.... Apr 28 2007, 15:22         dxp Цитата(lks @ Apr 28 2007, 19:22) Вот так,... Apr 28 2007, 17:21          lks Цитата(dxp @ Apr 28 2007, 18:21) P.P.S. Ч... Apr 28 2007, 21:34           rezident Цитата(lks @ Apr 29 2007, 00:34) typedef ... Apr 28 2007, 22:19          lks Цитата(dxp @ Apr 28 2007, 18:21) Какой пр... Apr 28 2007, 22:26           Legotron Цитата(lks @ Apr 28 2007, 23:26) И все же... Apr 28 2007, 22:58            lks Цитата(Legotron @ Apr 28 2007, 23:58) Я д... Apr 29 2007, 14:26             zltigo Цитата(lks @ Apr 29 2007, 14:26) Возможно... Apr 29 2007, 15:29              lks Цитата(zltigo @ Apr 29 2007, 16:29) Подск... Apr 29 2007, 15:49               Сергей Борщ Ладно, я еще поприкалываюсь
Цитата(lks @ Apr ... Apr 29 2007, 18:02                lks Цитата(Сергей Борщ @ Apr 29 2007, 19:02) ... Apr 29 2007, 19:24                 zltigo Цитата(lks @ Apr 29 2007, 19:24) Что тоже... Apr 29 2007, 19:36                  lks Цитата(zltigo @ Apr 29 2007, 20:36) Блеск... Apr 29 2007, 19:46                   zltigo Цитата(lks @ Apr 29 2007, 19:46) Да нет, ... Apr 29 2007, 20:01                 Сергей Борщ Цитата(lks @ Apr 29 2007, 19:24) В чем пр... Apr 29 2007, 21:03                  lks Цитата(Сергей Борщ @ Apr 29 2007, 22:03) ... Apr 29 2007, 21:31                   zltigo Цитата(lks @ Apr 29 2007, 21:31) книжку п... Apr 29 2007, 21:41                    lks Цитата(zltigo @ Apr 29 2007, 22:41) За яз... Apr 29 2007, 21:50                     zltigo Цитата(lks @ Apr 29 2007, 21:50) А что вы... Apr 29 2007, 22:04                      Legotron Уважаемые собеседники!
Не составит ли вам бол... Apr 29 2007, 22:36                       zltigo Цитата(Legotron @ Apr 29 2007, 22:36) еще... Apr 29 2007, 22:56            Legotron Цитата(Legotron @ Apr 28 2007, 23:58) У м... Apr 29 2007, 15:44             zltigo Цитата(Legotron @ Apr 29 2007, 15:44) Ptr... Apr 29 2007, 15:54              Legotron Цитата(zltigo @ Apr 29 2007, 16:51) ... Apr 29 2007, 15:56               zltigo Цитата(Legotron @ Apr 29 2007, 15:56) why... Apr 29 2007, 16:06                Legotron Цитата(zltigo @ Apr 29 2007, 17:06) Потом... Apr 29 2007, 16:23           rezident Цитата(lks @ Apr 29 2007, 01:26) Непонятн... Apr 29 2007, 00:35         rezident Цитата(lks @ Apr 28 2007, 18:22) Ну тогда... Apr 28 2007, 17:48 o-henry Уважаемый tolik_zp!
На Ваш вопрос Вы уже полу... Apr 28 2007, 15:40 lks Цитата(o-henry @ Apr 28 2007, 16:40)... Apr 28 2007, 15:47  zltigo Цитата(lks @ Apr 28 2007, 15:47) А я не н... Apr 28 2007, 15:57   lks Цитата(zltigo @ Apr 28 2007, 16:57) Тем х... Apr 28 2007, 16:58    zltigo Цитата(lks @ Apr 28 2007, 16:58) По сущес... Apr 28 2007, 17:10 Vladimir Chekin Дежа-вю...
Юзер: - Я решил сварить яйцо в микровол... Apr 28 2007, 19:00 rezident Цитата(Vladimir Chekin)Написать или заказать напис... Apr 28 2007, 19:04  rezident Цитата(lks @ Apr 29 2007, 19:34) Если я н... Apr 29 2007, 16:49   lks Цитата(zltigo @ Apr 29 2007, 18:10) Для т... Apr 29 2007, 17:25    zltigo Цитата(lks @ Apr 29 2007, 17:25) Список -... Apr 29 2007, 17:47 forever failure Неужели Дохтур Туамосес ? Apr 29 2007, 19:35 Vladimir Chekin rezident >> У вас есть адрес Доктора ТуамОс... Apr 30 2007, 03:24 Vladimir Chekin Может и не в кассу, имхо вот в этой короткой фразе... Apr 30 2007, 04:28 zltigo Цитата(Vladimir Chekin @ Apr 30 2007, 04... Apr 30 2007, 13:30  Dog Pawlowa Цитата(zltigo @ Apr 30 2007, 13:30) Описа... Apr 30 2007, 17:16   zltigo Цитата(Dog Pawlowa @ Apr 30 2007, 17:16) ... Apr 30 2007, 17:28
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|