|
К знатокам, Локальные переменные. |
|
|
|
 |
Ответов
|
Sep 18 2007, 09:21
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Тут проскочила чья-то фраза, что компилятор лучше работает со структурами чем с массивами. И я решил проверить некоторые моменты моей проги. Выводы просты - казалось бы мелочи, но они имеют важнейшее значение. И, главное, если вдуматься и проанализировать, то всё это лежит на поверхности! Например я обрабатываю 6 шаговых двигателей. По каждому из шаговых двигателей имеется несколько значений типа положение/тек.положение,скорость/тек.скорость и т.д. В первой редакции проги всё выглядело примерно так uint16_t Speed[MAXDVG],SpeedReal[MAXDVG],State[MAXDVG],StateReal[MAXDVG]; Теперь переписал примерно так struct { uint16_t Speed, SpeedReal... } Dvg[MAXDVG]; там где идёт единичное обращение к конкретному полю конкретного двигателя, - естественно ничего не изменилось, но там где в цикле идёт работа с двигателями и сравниваются различные поля одного двигателя - там код уменьшился раза в два! Переписал таки же образом работу с АЦП. Если вдуматься, то это медленный дрейф к объектам и его свойствам и к С++ как дальнейшее развитие этих идей.  Похоже надо более полно изучать С++ и постепенно переходить.
|
|
|
|
|
Sep 18 2007, 18:41
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(SasaVitebsk @ Sep 18 2007, 13:21)  Если вдуматься, то это медленный дрейф к объектам и его свойствам и к С++ как дальнейшее развитие этих идей.  Похоже надо более полно изучать С++ и постепенно переходить. А вот здесь я бы на Вашем месте сильно не спешил. Дело в том, что любой код на С++ может быть преренесен на С без потери скорости/компактности, а обратное к сожалению не верно, те код на С перенесенный на С++ гарантированно будет не меньше/не быстрее чем исходный. Собственно часть компиляторов так и работает, считая код на С++ препроцессорной надстройкой над С... Хотя конечно иногда удобно, тока нужно четко себе представлять в каком месте будет оверхед.
|
|
|
|
|
Sep 19 2007, 04:18
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(singlskv @ Sep 19 2007, 01:41)  А вот здесь я бы на Вашем месте сильно не спешил. Дело в том, что любой код на С++ может быть преренесен на С без потери скорости/компактности, а обратное к сожалению не верно, те код на С перенесенный на С++ гарантированно будет не меньше/не быстрее чем исходный.  С++ на С не переносится в принципе, т.к. С является подмножеством С++ (хотя и не 100% совместимым). А вот С-код на С++ переносится достаточно легко, в некоторых случаях даже делать ничего не надо, он сразу работает. И по эффективности тут никаких потерь нет. Попробуйте какую-нибудь С программу, написанную под IAR С скомпилить тем же IAR'ом в С++ режиме. Сравните результат.  Цитата(singlskv @ Sep 19 2007, 01:41)  Собственно часть компиляторов так и работает, считая код на С++ препроцессорной надстройкой над С... Это вы про С с классами говорите, который компилировался С front. Ну, так это еще не полноценный С++, а его предтеча. Давайте уже оперировать реалиями сегодняшнего дня. Цитата(SasaVitebsk @ Sep 19 2007, 06:46)  А зря не верится. И я тоже не верил. Более того, когда писал на асме вообще не использовал данные команды. Считал их бесполезными.  Оно и понятно. Применение команд типа LDD где используется смещение делает прогу на асме фактически нечитаемой. К чему обращаешься - непонятно. Ну, это как писать. Сделайте смещения именованными и все сразу станет понятно. Когда-то, когда я в целях тренировки кое-что еще писал на асм для AVR, делал так (писано было еще в 1998 году, пакет - незабвенный IAR 1.40  ): Код #define LASER_CODE 0 #define TPREVIOUS_POINT 2 #define STATE 4 #define NSPURIOUS 5 #define NSYMBOLS 6 #define FLASER_CODE_DONE 7
rseg UDATA0
Laser_code: ds 2 ; 0-1 tPrevious_point: ds 2 ; 2-3 State: ds 1 ; 4 nSpurious: ds 1 ; 5 nSymbols: ds 1 ; 6 fLaser_code_done: ds 1 ; 7 ...
rseg RCODE ... ldi r30, low(Laser_code) ldi r31,high(Laser_code) ... ldd r18,Z+TPREVIOUS_POINT ; load previous point ldd r19,Z+TPREVIOUS_POINT + 1 ; ... ldd r18,Z+STATE ; load state ... ldd r18,Z+LASER_CODE ; load laser code ldd r19,Z+LASER_CODE+1 ; ror r19 ; modify laser code ror r18 ; std Z+LASER_CODE,r18 ; store laser code std Z+LASER_CODE+1,r19 ; ... std Z+TPREVIOUS_POINT,r20 ; store current point as previous std Z+TPREVIOUS_POINT+1,r21 ; ; ldd r18,Z+NSYMBOLS ; inc r18 ; inc nSymbols std Z+NSYMBOLS,r18 ; ... ldd r18,Z+NSPURIOUS ; inc nSpurious inc r18 ; std Z+NSPURIOUS,r18 ; ... и т.д. Как видите, все вполне читаемо и понятно. Код оптимален. По сути тут руками сделана оптимизация Clustering variables.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Sep 19 2007, 19:59
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(dxp @ Sep 19 2007, 08:18)   С++ на С не переносится в принципе, т.к. С является подмножеством С++ (хотя и не 100% совместимым). А вот С-код на С++ переносится достаточно легко, в некоторых случаях даже делать ничего не надо, он сразу работает. И по эффективности тут никаких потерь нет. Попробуйте какую-нибудь С программу, написанную под IAR С скомпилить тем же IAR'ом в С++ режиме. Сравните результат.  Вы не внимательно читали мои посты, я говорил лишь о том что любую прогу на С++ можно написать на С не менее эфективно(почти всегда более эфективно). Правда, усилий может понадобится больше. В конечном итоге это примерно такой же спор как насчет С vs ASM. Очевидно что на ASM всегда можно написать лучше(быстрее/компактнее по коду) чем на С. так же для меня вполне очевидно, что то же будет касаться С++ vs C. Вопрос скорее в решаемой задаче и в количестве железных ресурсов которые не жалко... Ок, задам Вам такой вопрос: как Вы относитесь к "прерываниям с классами" ? Цитата Это вы про С с классами говорите, который компилировался С front. Ну, так это еще не полноценный С++, а его предтеча. Давайте уже оперировать реалиями сегодняшнего дня. Да, это действительно был Cfront в редакции AT&T кажись..., подзабылось уже... Тока тогда он уже был С++ с практически всеми атрибутами современных версий, по моему, исключений еще небыло в современном виде, а шаблоны уже были... Вобщем здесь уже спорить не буду, не помню всех деталей...
|
|
|
|
|
Sep 20 2007, 03:19
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(singlskv @ Sep 20 2007, 02:59)  Вы не внимательно читали мои посты, я говорил лишь о том что любую прогу на С++ можно написать на С не менее эфективно(почти всегда более эфективно). Правда, усилий может понадобится больше. Я внимательно читал. И обратное утверждение верно. Цитата(singlskv @ Sep 20 2007, 02:59)  В конечном итоге это примерно такой же спор как насчет С vs ASM. Нет, неверно. С и асм - это принципиально разные вещи, а С и С++ - это подмножество и надмножество. Все, что можно сделать на С, на С++ переноситься почти без изменений. Никто ведь не заставляет использовать исключения, RTTI, шаблоны, это их эффективность является препятствием к достижению цели. Все средства С в С++ есть, поэтому любая С программа почти автоматически является С++ программой. Цитата(singlskv @ Sep 20 2007, 02:59)  Очевидно что на ASM всегда можно написать лучше(быстрее/компактнее по коду) чем на С. Да. Хотя на практике случаи бывают и обратные. Цитата(singlskv @ Sep 20 2007, 02:59)  так же для меня вполне очевидно, что то же будет касаться С++ vs C. См выше. Цитата(singlskv @ Sep 20 2007, 02:59)  Ок, задам Вам такой вопрос: как Вы относитесь к "прерываниям с классами" ? Что такое "прерывания с классами"?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
SasaVitebsk К знатокам Sep 6 2007, 00:58 dxp Все равно как-то туманно. Вы бы псевдокод привели,... Sep 6 2007, 04:33 alexander55 Цитата(SasaVitebsk @ Sep 6 2007, 04:58) П... Sep 6 2007, 04:53 Сергей Борщ Да, действительно мутновато. Если я правильно поня... Sep 6 2007, 05:02 MALLOY2 Можно еще все нужные переменные загнать в 1 структ... Sep 6 2007, 05:49 Dog Pawlowa Цитата(SasaVitebsk @ Sep 6 2007, 03:58) П... Sep 6 2007, 07:51 alexander55 Цитата(Dog Pawlowa @ Sep 6 2007, 11:51) Я... Sep 6 2007, 09:20 SasaVitebsk Лучше всех понял проблему Сергей Борщ. Я так и сде... Sep 6 2007, 11:27 scifi Цитата(SasaVitebsk @ Sep 6 2007, 15:27) В... Sep 6 2007, 13:05  SasaVitebsk Цитата(scifi @ Sep 6 2007, 16:05) Быстрее... Sep 6 2007, 19:45 Rst7 Цитата(SasaVitebsk @ Sep 6 2007, 14:27) К... Sep 8 2007, 10:49  SasaVitebsk Всем спасибо. Буду осмысливать и пробовать - экспе... Sep 9 2007, 14:54   Rst7 Цитата(SasaVitebsk @ Sep 9 2007, 17:54) В... Sep 10 2007, 06:10 vmp Похоже, здесь основная проблема - это ограничения ... Sep 7 2007, 13:42 dxp Цитата(vmp @ Sep 7 2007, 20:42) Похоже, з... Sep 8 2007, 10:12  Сергей Борщ Цитата(dxp @ Sep 8 2007, 13:12) Там (в EW... Sep 8 2007, 11:39 mdmitry Возможно, поможет сократить время выполнения генер... Sep 8 2007, 22:28 alexander55 Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ... Sep 18 2007, 09:49 vmp Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ... Sep 18 2007, 10:45  rezident Цитата(vmp @ Sep 18 2007, 16:45) Для отде... Sep 18 2007, 13:08   vmp Цитата(rezident @ Sep 18 2007, 17:08) Изв... Sep 18 2007, 13:35    Dog Pawlowa Цитата(vmp @ Sep 18 2007, 16:35) Особенно... Sep 18 2007, 16:30     singlskv Цитата(Dog Pawlowa @ Sep 18 2007, 20:30) ... Sep 18 2007, 17:13     IgorKossak Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) ... Sep 18 2007, 18:07      Rst7 Цитата(IgorKossak @ Sep 18 2007, 21:07) Е... Sep 19 2007, 05:23       alexander55 Цитата(Rst7 @ Sep 19 2007, 09:23) А вот C... Sep 19 2007, 05:57       dxp Цитата(Rst7 @ Sep 19 2007, 12:23) А вот C... Sep 19 2007, 12:18        Rst7 Цитата(dxp @ Sep 19 2007, 15:18) Отнюдь. ... Sep 19 2007, 12:34         alexander55 Цитата(Rst7 @ Sep 19 2007, 16:34) ключево... Sep 19 2007, 12:54         dxp Цитата(Rst7 @ Sep 19 2007, 19:34) Хуже бу... Sep 19 2007, 13:21          SasaVitebsk Цитата(dxp @ Sep 19 2007, 16:21) C++ - эт... Sep 21 2007, 18:26           singlskv Цитата(SasaVitebsk @ Sep 21 2007, 22:26) ... Sep 21 2007, 18:54     SasaVitebsk Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) ... Sep 18 2007, 23:46  zltigo Цитата(singlskv @ Sep 18 2007, 21:41) Соб... Sep 18 2007, 19:34   singlskv Цитата(zltigo @ Sep 18 2007, 23:34) Загну... Sep 18 2007, 19:47    zltigo Цитата(singlskv @ Sep 18 2007, 22:47) лет... Sep 18 2007, 19:57     singlskv Цитата(zltigo @ Sep 18 2007, 23:57) Дела ... Sep 18 2007, 20:16    zltigo Цитата(singlskv @ Sep 19 2007, 22:59) Оче... Sep 19 2007, 21:03     singlskv Цитата(zltigo @ Sep 20 2007, 01:03) Оба э... Sep 19 2007, 21:27      alexander55 Цитата(singlskv @ Sep 20 2007, 01:27) Пов... Sep 20 2007, 04:58       Непомнящий Евгений Цитата(alexander55 @ Sep 20 2007, 08:58) ... Sep 20 2007, 11:42        singlskv Цитата(Непомнящий Евгений @ Sep 20 2007, 15... Sep 20 2007, 16:13         dxp Цитата(singlskv @ Sep 20 2007, 23:13) При... Sep 21 2007, 03:49         Непомнящий Евгений Цитата(singlskv @ Sep 20 2007, 20:13) А н... Sep 21 2007, 04:36          dxp Цитата(Непомнящий Евгений @ Sep 21 2007, 11... Sep 21 2007, 05:50           Непомнящий Евгений Цитата(dxp @ Sep 21 2007, 09:50) P.S. В т... Sep 21 2007, 06:49            dxp Цитата(Непомнящий Евгений @ Sep 21 2007, 13... Sep 21 2007, 07:14             Maddy Цитата(dxp @ Sep 21 2007, 11:14) Ну, не з... Sep 21 2007, 08:46              dxp Цитата(Maddy @ Sep 21 2007, 15:46) Не фле... Sep 21 2007, 09:12               Maddy 2 dxp - Thanks Sep 21 2007, 09:31           alexander55 Цитата(dxp @ Sep 21 2007, 09:50) P.S. В т... Sep 21 2007, 06:51           singlskv Цитата(dxp @ Sep 21 2007, 09:50) Под джит... Sep 21 2007, 20:44            dxp Цитата(singlskv @ Sep 22 2007, 03:44) джи... Sep 22 2007, 16:52             singlskv Цитата(dxp @ Sep 22 2007, 20:52) , давайт... Sep 22 2007, 17:49              zltigo Цитата(singlskv @ Sep 22 2007, 20:49) Кон... Sep 22 2007, 18:11               singlskv Цитата(zltigo @ Sep 22 2007, 22:11) Это в... Sep 22 2007, 19:21                zltigo Цитата(singlskv @ Sep 22 2007, 22:00) Вот... Sep 22 2007, 19:33                 singlskv Цитата(zltigo @ Sep 22 2007, 23:33) Если ... Sep 22 2007, 20:09                  zltigo Цитата(singlskv @ Sep 22 2007, 23:09) Вы ... Sep 22 2007, 20:39                   singlskv Цитата(zltigo @ Sep 23 2007, 00:39) - 16b... Sep 22 2007, 21:13                    zltigo Цитата(singlskv @ Sep 23 2007, 00:13) Да,... Sep 22 2007, 21:36                     singlskv Да, далеко мы уже удалились... от темы,
единствен... Sep 22 2007, 21:47                      zltigo Цитата(singlskv @ Sep 23 2007, 00:47) Т.к... Sep 22 2007, 22:22                dxp Цитата(singlskv @ Sep 23 2007, 02:21) Это... Sep 23 2007, 08:59                 singlskv Цитата(dxp @ Sep 23 2007, 12:59) А если п... Sep 23 2007, 14:35                  dxp Цитата(singlskv @ Sep 23 2007, 21:35) Хор... Sep 23 2007, 16:10                   singlskv Цитата(dxp @ Sep 23 2007, 20:10) То, что ... Sep 23 2007, 17:20                    dxp Цитата(singlskv @ Sep 24 2007, 00:20) Ну ... Sep 24 2007, 03:38                  zltigo Цитата(singlskv @ Sep 23 2007, 17:35) zlt... Sep 23 2007, 19:21                   singlskv Цитата(zltigo @ Sep 23 2007, 23:21) Такие... Sep 23 2007, 21:00                    zltigo Цитата(singlskv @ Sep 24 2007, 00:00) Zlt... Sep 23 2007, 21:52                     singlskv Цитата(zltigo @ Sep 24 2007, 01:52) Дело ... Sep 23 2007, 22:50              dxp Цитата(singlskv @ Sep 23 2007, 00:49) Дав... Sep 22 2007, 18:56 SasaVitebsk Большое спасибо за развёрнутый совет. Похоже надо ... Sep 22 2007, 17:17 dxp Цитата(SasaVitebsk @ Sep 23 2007, 00:17) ... Sep 23 2007, 13:52 SasaVitebsk Попробую я вмешаться. Я тоже делал много изделий с... Sep 23 2007, 21:36 Rst7 Лично я в данном моменте (обмен по RSу, например) ... Sep 24 2007, 07:05 Непомнящий Евгений Цитата(Rst7 @ Sep 24 2007, 11:05) Теперь ... Sep 24 2007, 08:35  Rst7 Цитата(Непомнящий Евгений @ Sep 24 2007, 11... Sep 24 2007, 08:51   alexander55 Цитата(Rst7 @ Sep 24 2007, 12:51) Неужели... Sep 24 2007, 09:28   Непомнящий Евгений Вдогонку
Цитата(Rst7 @ Sep 24 2007, 12:51... Sep 24 2007, 09:51    Rst7 Цитата(Непомнящий Евгений @ Sep 24 2007, 12... Sep 24 2007, 10:14 Непомнящий Евгений Мой класс TCanal посылает запрос, ждет получения о... Sep 24 2007, 09:25 Rst7 Цитата(Непомнящий Евгений @ Sep 24 2007, 12... Sep 24 2007, 09:39  Непомнящий Евгений Цитата(Rst7 @ Sep 24 2007, 13:39) Или тут... Sep 24 2007, 10:38 Rst7 Цитата3. У меня логика посылки\повтора посылк... Sep 24 2007, 11:14 dxp Цитата(Rst7 @ Sep 24 2007, 18:14) Слова. ... Sep 24 2007, 11:28  Rst7 Цитата(dxp @ Sep 24 2007, 14:28) Я что-то... Sep 24 2007, 11:53   dxp Цитата(Rst7 @ Sep 24 2007, 18:53) Ну да..... Sep 24 2007, 12:06   Непомнящий Евгений Цитата(Rst7 @ Sep 24 2007, 15:53) Моя пра... Sep 24 2007, 12:08 Непомнящий Евгений Цитата(Rst7 @ Sep 24 2007, 15:14) У меня ... Sep 24 2007, 11:53  Rst7 Цитата(Непомнящий Евгений @ Sep 24 2007, 14... Sep 24 2007, 12:23   dxp Цитата(Rst7 @ Sep 24 2007, 19:23) Не прос... Sep 24 2007, 12:49   Непомнящий Евгений Цитата(Rst7 @ Sep 24 2007, 16:23) А вам -... Sep 24 2007, 12:59    dxp Цитата(Непомнящий Евгений @ Sep 24 2007, 19... Sep 24 2007, 13:35
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|