Кольцевой буфер
- 1 year ago
- 0
- 0
В информатике бу́фер (от англ. buffer ), мн. ч. буфера́ , бу́феры — это область памяти , используемая для временного хранения данных при вводе или выводе. Обмен данными (ввод и вывод) может происходить как с внешними устройствами, так и с процессами в пределах компьютера . Буфера могут быть реализованы в аппаратном или программном обеспечении , но подавляющее большинство буферов реализуется в программном обеспечении. Буфера используются, когда существует разница между скоростью получения данных и скоростью их обработки или в случае, когда эти скорости переменны, например, при буферизации печати.
Эти термины не являются взаимоисключающими, и их функции часто смешиваются, но существует различие в их предназначении. Буфер — временное хранилище, где большие блоки данных сливаются или разбиваются на части. Это необходимо для взаимодействия с запоминающим устройством , которое работает с большими блоками данных, или когда данные передаются в другом порядке чем тот, в котором они формируются, и лишь желательно — в том случае, когда использование мелких блоков неэффективно. Использование буфера приносит пользу, даже если буферизуемые данные пишутся в буфер и читаются из него однократно.
В свою очередь, использование кэша предполагает, что данные будут читаться из кэша чаще, чем записываться туда. Его назначение — уменьшить число обращений к запоминающему устройству, а не сделать их более эффективными.
Метод организации обмена данными между устройствами или процессами с использованием буфера называется буферизацией . Один из наиболее известных для пользователей ПК примеров такого использования буфера — буфер обмена в ОС Microsoft Windows .
Также буфера используются в программировании для получения данных от функций . Функции Windows API , результатом работы которых является строковое значение (например, ), принимают в качестве одного из аргументов указатель на буфер, куда производится вывод. Вот пример фрагмента исходного текста программы на C , преобразующего строку «Hello, World!» в Unicode :
// исходная строка
CHAR text[] = "Hello, World!";
// буфер для получения результата
WCHAR buffer[256];
// преобразование строки в Unicode
MultiByteToWideChar(CP_ACP, 0, text, strlen(text) + 1,
buffer, sizeof(buffer)/sizeof(WCHAR));