|
К знатокам, Локальные переменные. |
|
|
|
 |
Ответов
|
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 19 2007, 21:03
|

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

|
Цитата(singlskv @ Sep 19 2007, 22:59)  Очевидно что на ASM всегда можно написать лучше(быстрее/компактнее по коду) чем на С. так же для меня вполне очевидно, что то же будет касаться С++ vs C. Оба этих утверждения при имеющейся тенденциям к - усложнению программ; - уменьшению времени на их разработку; - уменьшения времени жизни целевого железа; - увеличении цены ошибки; Становятся все больше и больше гипотетическими и все нереализуемее на практике. Толку в гипотетических преимуществах, если за обозримое время и деньги их нельзя реализовать. Когда в 80x годах я взялся за C++, причем за именно ++, а не 'С', то с моей первой программой приключилась такая история - я выиграл спор  . Потребовалась во времена IBM PC/XT для сугубо личных целей простенькая псевдографическая текстовая библиотечка. В общем ничего сверестественного открять окошко-(вывести текст) - еще несколько огошек, перекрытие, всплытие - все без особых затей. Ну и начал С++ изучать. Был у менгя парень, очень талантливый, уже несколько лет много пишущий на 'C' и виртуозно на ASM - он меня от плюсов отговаривал сильно, ну монстрально, тормознуто и т.д.... Я не отступал и он предложил мне доказать, написав библиотеку на 'C' и используя ее в одной и той-те тестовой программе убедиться в жуткой тормознутости C++. Причем в те времена 4,7 Mhz процессоров скорость прекрасно оченивалась невооруженным взглядом  . За несколько недель, вечерами-урывками почти за одинаковое время были написаны две библиотеки. Напоминаю, это была моя первая программа! Моя C++ была меньше по размеру исходников, меньше по размеру кода и работала быстрее. Причем при этом я Турбодебагером не пользовался - ну просто некогда было изучать  , да и само заработало, а коллега довольно плотно в отладке сидел. Случай, конечно, несколько вырожденный, ибо уж больно оконные задачи на плюсы хорошо легли... На самом деле обе работали очень медленно  Пошли вставки на ASM, коллега уязвленный потратил массу времени на вылизывание сишного варианта, все находки были реализованы, листинги вычитаны... В конце-концов библиотека стала сишной с очень большими вкраплениями ASM. Но в принципе переход на C был обусловлен изрядной тупостью первого Борландячего плюсового компилятора. Уже в более поздние времена работая с Watcom явных претензий к реализации С++ не было. Да и Борланд попозже исправился, до того, что я стал старые Борландячие проекты (да и вообще все) компилить плюсовым компилятором - эффективнее получалось!
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
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     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    dxp Цитата(singlskv @ Sep 20 2007, 02:59) Вы ... Sep 20 2007, 03:19 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 >
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|