Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Как создать циклический буфер.
"...Ну вы блин даете..."
читайте классику
// на птичьем языке
class Cyclic_Buffer// n()
{
public:
bool Add(const class Object& obj);
protected:
Array<Objects> m_arr; // сам буффера
int m_buffSize; // размер буфера
int m_bInsertPos;
}

// основная идея
bool Cyclic_Buffer::Add(const class Object& obj)
{
// переключимся на начало если заполнили буфер полностью
if (m_nInsertPos >= m_buffSize)

sorry
m_arr[m_nInsertPos++] = obj
Я понимаю что это просто, но мне нужно максимально быстро и без классов.

мне был предложен такой вариант

delay_buffer[n&delay_mask] = in;

delay_mask размер буфера -1
n меняется от 0 до delay_mask,

Я работаю со звуком и мне нужен задержанный сигнал.
Делаю так

out=delay_buffer[(n-delay)&delay_mask];

при твоем способе будет обращение к элементу с отрицательным индексом, а если сделать так
if (delay<nDelayBuffI)
out=delay_buffer[(n-delay)];
else
out=0;
то будет ноль через каждые delay_mask отсчетов (это не есть гуд)

Есть ли способ делать циклический буфер быстрее чем у меня?
Ты спрашивал как сделать а не как оптимизировать
посему азы и приведены
так ведь не должно быть отрицательных индексов в циклическом буффере просто для него
if (n - delay < 0)
index = delay_mask+n-delay; //взять с хвоста
else
index = n-delay;

в принципе можно оптимизировать вычисления при переходе хвост голова через дополнения до 1 отрицательного числа
zlelik:
Все правильно тебе предложили, только с одной оговоркой. Этот способ будет работать при величине буффера, равной одной из степеней двойки. Для произвольного размера лучше использовать такой способ:
delay_buffer[n % deleay_mask] = data;
А быстрее только на чистом асме.

<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS