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

 
 
> Ring bufer, критерии выбора реализации
k155la3
сообщение Jan 24 2017, 14:54
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Для работы с архивами в флеш использую колцевой буфер.
Контроль диапазона индекса буфера реализован на if.
-----------------
Есть решения, где для ограничения выхода за размер буфера
используется операция остатка от деления %

Я для работы буфера использую:
- указатель индекса
- кол-во данных в буфере

В буфер идет только запись, удалять данные из него не требуется.

(?) На сколько лучше-хуже для контроля границы индекса использовать операцию % ?

(для размеров буфера, кратных степени 2 можно использовать двоичную маску, это мы знаем. Но размеры заданы и не кратные 2).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sigmaN
сообщение Jan 25 2017, 09:59
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Лично я бы делал if.
В отрыве от предположений об аппаратном множителе и т.д. - операция % дороже сравнения!

Вам тут уже подсказали вариант
Цитата
#define ncell(m) (sizeof(m) / sizeof((m)[0])) //кол-во элементов массива m
int ix; //индекс
char buf[N];
if (--ix < 0) ix += ncell(buf);

Я голосую за него.

Так же в плане оптимальности не забывайте, что сравнение с нулем в 90% выгоднее сравнения с любым другим числом.
Об этом даже Александреску в своих лекциях не раз рассказывал. Ибо 0 всегда где-то есть. Либо есть отдельная инструкция для теста на 0 либо в регистре где-то уже есть 0 и компилятор его подсунет в операцию. А любое другое число придется сначала куда-то положить, а потом сравнить. 0 - ваш лучший друг, говорил Александреску и я с ним полностью согласен wink.gif


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 12:43
Рейтинг@Mail.ru


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