реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Циклы в ARM9, что предпочтительнее
toweroff
сообщение Jul 31 2011, 14:55
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый день!

Заинтересовал такой момент - что лучше использовать для цикла

1. for (i=0; i<10; i++) {}

2.
i=10;
do {} while (--i);

3.
i=10;
while (i--) {}

4. Я маюсь дурью и компилятор все сделает как надо sm.gif

Помнится, в х51 был предпочтительнее второй вариант (потому как djnz) для циклов <=256, а вот как дело с ARM9 ?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jul 31 2011, 15:11
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



4


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
R.A.K.
сообщение Jul 31 2011, 16:16
Сообщение #3


Участник
*

Группа: Validating
Сообщений: 55
Регистрация: 6-04-11
Пользователь №: 64 180



Цитата(toweroff @ Jul 31 2011, 18:55) *
Заинтересовал такой момент - что лучше использовать для цикла

Пятый вариант:
for (i = 10; i; i--) {}
А то нехорошо получается. sm.gif Зачем for обделили?
Циклы вообще лучше организовывать с проверкой на ноль (это я Генрри Уоррена цитирую - он это еще где-то в начале книги пишет).
Цитата(toweroff @ Jul 31 2011, 18:55) *
Помнится, в х51 был предпочтительнее второй вариант (потому как djnz) для циклов <=256, а вот как дело с ARM9 ?

x51 - 8-bit.
ARM - 32-bit. Будет одинаково - прогонять цикл 10 раз или 4294967295. sm.gif

Попутно почитайте Хэзфилд, Кирби "Искусство программирования на С", главу про оптимизацию - "разворачивание цикла", "предварительная оптимизация - зло" (или как-то так - не помню).
И вот уже с этих позиций (а также, например,с учетом, 5-стадийного конвейера в ARM9) DpInRock, несомненно, прав - Вы маетесь пунктом 4. sm.gif


Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 31 2011, 16:50
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Спасибо, я, в общем-то, так и предполагал sm.gif
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 31 2011, 17:04
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



На Армах не нужно так извращаться. Там в исходниках лучше поощрять читабельность и краткость. Экстрим нужно (если нужно) делать на асме.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Aurochs
сообщение Aug 1 2011, 09:02
Сообщение #6


Ортодокс
***

Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775



Цитата(GetSmart @ Jul 31 2011, 20:04) *
На Армах не нужно так извращаться. Там в исходниках лучше поощрять читабельность и краткость. Экстрим нужно (если нужно) делать на асме.

+1
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 2 2011, 02:30
Сообщение #7


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (toweroff @ Jul 31 2011, 23:55) *
2.
i=10;
do {} while (--i);

3.
i=10;
while (i--) {}

Эти циклы по сути разные. Первый выполнится всегда, как минумум один раз. Второй - нет. Нужно соблюдать осторожность при их использовании. А так - безприкословно вариант 4 laughing.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 2 2011, 06:14
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(haker_fox @ Aug 2 2011, 06:30) *
Эти циклы по сути разные

разумеется sm.gif
подразумевались просто циклы с пред- и постусловиями
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01523 секунд с 7
ELECTRONIX ©2004-2016