Показать меню

Кольцевой буфер

Кольцевой буфер, или циклический буфер (англ. ring-buffer) — это структура данных, использующая единственный буфер фиксированного размера, как будто бы после последнего элемента сразу же снова идет первый. Такая структура легко предоставляет возможность буферизации потоков данных.

Применение

Кольцевой буфер находит очень широкое применение в том числе при программировании микроконтроллеров. Данные структуры часто используют для организации различных очередей сообщений и буферов приёма-передачи различных коммуникационных интерфейсов. Популярность КБ обусловлена тем, что это один из самых простых и эффективных способов организовать FIFO (англ. first in — first out, «первым пришёл — первым вышел») без использования динамической памяти. Существует множество разновидностей КБ.

Внутреннее устройство

Кольцевой буфер создается пустым, с некоторой заранее определенной длиной. Например, это семиэлементный буфер:

Предположим, что в середину буфера записывается 1 (в кольцевом буфере точная начальная ячейка не имеет значения):

Затем предположим, что после единицы были добавлены ещё два элемента — 2 и 3:

Если после этого два элемента должны быть удалены из буфера, то выбираются два наиболее старых элемента. В нашем случае удаляются элементы 1 и 2, в буфере остается только 3:

Если в буфере находится 7 элементов, то он заполнен:

Если продолжить запись в буфер, не принимая во внимание его заполненность, то новые данные начнут перезаписывать старые данные. В нашем случае, добавляя элементы A и B, мы перезапишем 3 и 4:

В другом варианте реализации процедуры, обслуживающие буфер, могут предотвратить перезапись данных и вернуть ошибку или выбросить исключение. Перезапись или её отсутствие оставляется на усмотрение обслуживающих процедур буфера или приложения, использующего кольцевой буфер.

Наконец, если теперь удалить из буфера два элемента, то удалены будут не 3 и 4, а 5 и 6, потому что A и B перезаписали элементы 3 и 4; буфер придет в состояние:


Еще по этой теме:
Profibus DP
Profibus DP
Profibus DP (с англ. Process Field Bus — шина полевого уровня и англ. Decentralized Peripherals — децентрализованные внешние периферийные устройства) — профиль протоколов промышленной сети Profibus
Менделеевская (станция метро)
Менделеевская (станция метро)
«Менделеевская» — станция Серпуховско-Тимирязевской линии Московского метрополитена. Открыта в составе участка «Чеховская» — «Савёловская» 31 декабря 1988 года. Глубина заложения — 48,5 м. Названа по
PowerPro
PowerPro
PowerPro — многофункциональная программа для операционной системы Windows, распространяемая по лицензии Freeware. Возможности программы Действия, которые может выполнять программа Запуск программ,
Особенности применения решетчатого настила
Особенности применения решетчатого настила
В современном строительстве применяется множество различных материалов. Особо значение занимает стальной настил решетчатый, которые в последние годы стал более востребованным. Это универсальная
Метод треугольной нерегулярной сети
Метод треугольной нерегулярной сети
Детерминистские методы могут быть разделены на две группы: глобальные и локальные. Глобальные методы при описании поверхности используют весь набор данных, локальные методы используют опорные точки,
Биогенная аккумуляция железа (часть 2)
Биогенная аккумуляция железа (часть 2)
Как показали наши предыдущие исследования, процесс биогенной аккумуляции железа в подзолистых почвах не только приводит к появлению железистых прослоек или конкреций, но оказывает и более глубокое
Комментарии:
Добавить комментарий
Ваше Имя:
Ваш E-Mail: