|
|
 |
Ответов
|
Jun 28 2010, 21:09
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Прежде, чем писать новое, изучил в отладчике работу обеих моих программ - начальной si16toad и измененной itoa, в которой операции % и / были заменены вызовом библиотечной функции div. Напомню: Keil uVision - RealView MDK-ARM 4.10, STM32F103. Результаты оказались интересными.
После компиляции в окне Build Ouitput для обеих программ выдаются одинаковые размеры для кода - 548 байтов при оптимизации O0 и 536 байтов при оптимизации O3. Почему они одинаковые, не понимаю (см. ниже)?! Размеры данных всех типов тоже одинаковые вообще всегда, но это, как раз, не удивляет.
Посчитал размер обеих функций по листингу C компилятора (есть галочка в настройках генерировать листинг). При O0 для si16toad насчитал 84 байта, для itoa 98 байтов (не считая 14 байтов в самой функции div, это уже в отладчике увидел). При O3 - 80 байтов и 94 байта, соответственно. Причем, при оптимизации O0 в si16toad команда деления использовалась дважды, а при O3 только один раз. В-общем, мой первый вариант оказался компактнее.
Посчитал в отладчике количество тактов. Счетчик тактов виден в окне регистров, засекал значение перед вызовом своей функции и после нее. При O0 si16toad выполнялась за 171 такт, itoa за 232 такта. При O3 - 121 такт и 210 тактов, соответственно. Мой первый вариант оказался еще и быстрее.
Увидел лишние знаковые и беззнаковые расширения для переменных меньше 32 байтов. Вот здесь буду совершенствовать программу. Массив или указатель - тоже проверю. Заносить пробелы сразу - их, к сожалению, максимум 5 (не 4). Над этим и др. пока думаю.
|
|
|
|
|
Jun 28 2010, 21:57
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(zltigo @ Jun 29 2010, 00:33)  Их у Вас четыре. Можете попробовать на пальцах посчитать от X0 (раз-два) до X32768(раз-два-..шесть). Ну и размер должен быть на на уровне 60 байт, ну и тактов заметно менее. Перед "0" я символ + или - не ставлю (считаю, так "красивее" и "правильнее"), потому и обработка такая в начале программ. Итого _ _ _ _ _ 0 \0. По поводу размеров и тактов - могу выдать весь проект в заархивированном виде. В настройках есть какие-то "галочки", которых не трогал. Может, что-то и упустил...
|
|
|
|
Сообщений в этой теме
badik Вопрос С Jun 24 2010, 18:29 DRUID3 atoi()/itoa(); Или что-то отсюда... Jun 24 2010, 18:43 Genadi Zawidowski Тут или пользоваться sprintf (или её вариантами - ... Jun 24 2010, 18:57 ViKo В свое время я задавал такой же вопрос. Получил не... Jun 25 2010, 11:29 zltigo QUOTE (ViKo @ Jun 25 2010, 14:29) Сам нап... Jun 25 2010, 11:38  sonycman Цитата(zltigo @ Jun 25 2010, 15:38) Совет... Jun 25 2010, 12:15  ViKo Цитата(zltigo @ Jun 25 2010, 14:38) Совет... Jun 25 2010, 12:21 jorikdima Цитата(ViKo @ Jun 25 2010, 15:29) В свое ... Jun 25 2010, 12:17 defunct Цитата(ViKo @ Jun 25 2010, 14:29) Сам нап... Jun 25 2010, 16:48  ssvSerge Цитата(defunct @ Jun 25 2010, 19:48) Друг... Jun 25 2010, 17:26 zltigo QUOTE (sonycman @ Jun 25 2010, 15:15) Что... Jun 25 2010, 12:24 ViKo Цитата(zltigo @ Jun 25 2010, 15:24) ...ли... Jun 25 2010, 12:31  sonycman Цитата(ViKo @ Jun 25 2010, 16:31) Оставил... Jun 25 2010, 12:38   zltigo QUOTE (sonycman @ Jun 25 2010, 15:38) Осо... Jun 25 2010, 12:57    ViKo Цитата(zltigo @ Jun 25 2010, 15:57) В дан... Jun 25 2010, 13:06    sonycman Цитата(zltigo @ Jun 25 2010, 16:57) Ну дл... Jun 25 2010, 13:13     aaarrr Цитата(sonycman @ Jun 25 2010, 17:13) Нер... Jun 25 2010, 13:14 ViKo Цитата(zltigo @ Jun 25 2010, 15:24) лучше... Jun 25 2010, 12:50  zltigo QUOTE (ViKo @ Jun 25 2010, 15:50) У вас е... Jun 25 2010, 13:28   ViKo Цитата(zltigo @ Jun 25 2010, 16:28) как и... Jun 25 2010, 13:34    zltigo QUOTE (ViKo @ Jun 25 2010, 16:34) нужно п... Jun 25 2010, 13:39     ViKo Цитата(zltigo @ Jun 25 2010, 16:39) Про ... Jun 25 2010, 13:43      aaarrr Цитата(ViKo @ Jun 25 2010, 17:43) И к код... Jun 25 2010, 14:49 aaarrr Просто как пример:
Кодunsigned int short2str(c... Jun 25 2010, 12:41 zltigo QUOTE (ViKo @ Jun 25 2010, 16:43) Это у в... Jun 25 2010, 13:56 ViKo Цитата(zltigo @ Jun 25 2010, 16:56) Ну эт... Jun 25 2010, 14:04  zltigo QUOTE (ViKo @ Jun 25 2010, 17:04) О! ... Jun 25 2010, 14:10   ViKo Цитата(zltigo @ Jun 25 2010, 17:10) Ну, н... Jun 25 2010, 16:15    Genadi Zawidowski Цитата(ViKo @ Jun 25 2010, 20:15) А разве... Jun 25 2010, 20:33     ViKo Цитата(Genadi Zawidowski @ Jun 25 2010, 23... Jun 25 2010, 21:29     ReAl Цитата(Genadi Zawidowski @ Jun 25 2010, 23... Jun 26 2010, 09:04      sonycman Цитата(ReAl @ Jun 26 2010, 13:04) Оптимиз... Jun 26 2010, 09:23      demiurg_spb Цитата(ReAl @ Jun 26 2010, 13:04) Так что... Jun 27 2010, 18:51 sonycman Цитата(zltigo @ Jun 25 2010, 17:56) А то,... Jun 25 2010, 14:55  zltigo QUOTE (sonycman @ Jun 25 2010, 17:55) Буд... Jun 25 2010, 16:30 Goodefine Когда то для дисплея (отсюда фиксированное число ц... Jun 25 2010, 16:19 ViKo Цитата(Goodefine @ Jun 25 2010, 19:19) vo... Jun 25 2010, 17:16 ViKo Пролистал K&R второе издание от корки до корки... Jun 25 2010, 19:15 aaarrr Цитата(ViKo @ Jun 25 2010, 23:15) Найти б... Jun 25 2010, 19:20 dimka76 Цитата(ViKo @ Jun 25 2010, 23:15) Пролист... Jun 26 2010, 04:36 zltigo QUOTE (ViKo @ Jun 25 2010, 22:15) Пролист... Jun 26 2010, 08:11  ViKo Цитата(zltigo @ Jun 26 2010, 11:11) Не об... Jun 26 2010, 09:08   zltigo QUOTE (ViKo @ Jun 26 2010, 12:08) А я для... Jun 26 2010, 09:18 sigmaN K&R не Ымбеддеры. А zltigo дело говорит вам. К... Jun 25 2010, 19:27 ViKo Покопался в своих проектах, нашел преобразование д... Jun 25 2010, 19:52 Непомнящий Евгений В свое время написал такое:
CODE
/**
* "Указ... Jun 26 2010, 09:16 ViKo Следуя рекомендациям, слегка модернизировал код.
К... Jun 26 2010, 10:24 ssvSerge Цитата(ViKo @ Jun 26 2010, 14:24) Следуя ... Jun 26 2010, 11:31 zltigo QUOTE (ViKo @ Jun 26 2010, 13:24) Для все... Jun 26 2010, 15:05  ViKo Цитата(zltigo @ Jun 26 2010, 18:05) // За... Jun 26 2010, 16:28   zltigo QUOTE (ViKo @ Jun 26 2010, 19:28) Sign - ... Jun 26 2010, 16:40   aaarrr Цитата(ViKo @ Jun 26 2010, 20:28) 2 aaarr... Jun 26 2010, 16:51 ViKo 2 ssvSerge
В ваших алгоритмах число записывается з... Jun 26 2010, 13:55 ssvSerge Цитата(ViKo @ Jun 26 2010, 16:55) В алгор... Jun 26 2010, 14:19  ViKo Цитата(ssvSerge @ Jun 26 2010, 17:19) ну ... Jun 26 2010, 14:42   ssvSerge Цитата(ViKo @ Jun 26 2010, 18:42) для мен... Jun 26 2010, 15:12   aaarrr Цитата(ViKo @ Jun 26 2010, 18:42) В данны... Jun 26 2010, 15:14 ViKo Спасибо всем! На сегодня и завтра - умолкаю. ... Jun 26 2010, 17:00 sonycman Цитата(ViKo @ Jun 26 2010, 21:00) Возраду... Jun 27 2010, 17:02 badik Господа всем огромный привет, ни как не думал, что... Jun 28 2010, 17:43   zltigo QUOTE (ViKo @ Jun 29 2010, 00:57) Перед ... Jun 28 2010, 22:03    ViKo 2 zltigo
Непременно.
Выставил две "галки... Jun 29 2010, 08:29 ViKo Кодvoid itoad(int number, uint8_t *string... Jun 29 2010, 13:48 Сергей Борщ Цитата(ViKo @ Jun 29 2010, 16:48) Код *... Jun 29 2010, 14:18  ViKo Цитата(Сергей Борщ @ Jun 29 2010, 17:18) ... Jun 29 2010, 14:29  zltigo QUOTE (Сергей Борщ @ Jun 29 2010, 17:18) ... Jun 29 2010, 14:34   ViKo Цитата(zltigo @ Jun 29 2010, 17:34) *(uin... Jun 29 2010, 14:39    zltigo QUOTE (ViKo @ Jun 29 2010, 17:39) Кавычки... Jun 29 2010, 14:45   ViKo Цитата(zltigo @ Jun 29 2010, 17:34) Код ... Jun 29 2010, 17:23    zltigo QUOTE (ViKo @ Jun 29 2010, 20:23) Так - н... Jun 29 2010, 17:40     ViKo Цитата(zltigo @ Jun 29 2010, 20:40) Код ... Jun 29 2010, 18:29      zltigo QUOTE (ViKo @ Jun 29 2010, 21:29) В смысл... Jun 29 2010, 18:38       ViKo Цитата(zltigo @ Jun 29 2010, 21:38) Вот к... Jun 29 2010, 19:52        zltigo QUOTE (ViKo @ Jun 29 2010, 22:52) Во всех... Jun 29 2010, 21:13  ViKo Цитата(Сергей Борщ @ Jun 29 2010, 17:18) ... Jul 1 2010, 08:55   zltigo QUOTE (ViKo @ Jul 1 2010, 10:55) Только в... Jul 1 2010, 11:57    ViKo Цитата(zltigo @ Jul 1 2010, 14:57) Это де... Jul 1 2010, 12:34     zltigo QUOTE (ViKo @ Jul 1 2010, 14:34) Давайте ... Jul 1 2010, 12:38      ViKo Цитата(zltigo @ Jul 1 2010, 15:38) Думае... Jul 1 2010, 12:52       zltigo QUOTE (ViKo @ Jul 1 2010, 14:52) Хочу зна... Jul 1 2010, 12:55        ViKo Цитата(zltigo @ Jul 1 2010, 15:55) Посчит... Jul 1 2010, 13:59         zltigo QUOTE (ViKo @ Jul 1 2010, 15:59) 2 zltigo... Jul 1 2010, 14:11         sonycman Цитата(ViKo @ Jul 1 2010, 17:59) А SDIV r... Jul 1 2010, 15:24 ViKo Выкладываю ваш вариант.
Последнее, что вы написали... Jun 30 2010, 08:00 ViKo "Шеф, все пропало!..."
По команде ... Jun 30 2010, 09:22 zltigo QUOTE (ViKo @ Jun 30 2010, 11:22) На всяк... Jun 30 2010, 19:02  ViKo Цитата(zltigo @ Jun 30 2010, 22:02) Ну ес... Jun 30 2010, 20:29   zltigo QUOTE (ViKo @ Jun 30 2010, 22:29) У вас в... Jun 30 2010, 21:14 ViKo 16-битовая версия (на основе 32-битовой)
Кодvoid ... Jun 30 2010, 11:26 MrYuran Вот никак не могу понять, почему никто до сих пор ... Jun 30 2010, 11:31 ViKo Цитата(MrYuran @ Jun 30 2010, 14:31) Вот ... Jun 30 2010, 11:35 ViKo Напоследок - проверил вариант с преобразованием в ... Jun 30 2010, 13:12 aaarrr Цитата(ViKo @ Jun 30 2010, 17:12) Получил... Jun 30 2010, 13:34  ViKo Цитата(aaarrr @ Jun 30 2010, 15:34) Ну, э... Jun 30 2010, 13:44 _Pasha Цитата(MrYuran @ Jun 30 2010, 14:31) Тяжё... Jun 30 2010, 21:42 ViKo Перепробовал все "извращения" со сравнен... Jul 2 2010, 09:07 ViKo Думаю, хуже не станет, если я доложу, что уменьшил... Jul 2 2010, 18:43
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|