リングバッファ【ring buffer】循環バッファ
別名 :環状バッファ/circular buffer/サーキュラーバッファ/円環状バッファ

通常のバッファは先頭から末尾に向かって順にデータを書き込み、末尾まで達したら使い切りとなる。リングバッファでは、末尾の次の要素が先頭に戻る構造になっており、固定サイズの領域を何度でも再利用できる。この循環は、インデックスを要素数で割った余りを求める剰余演算で実装されることが多い。物理的に輪の形をしているわけではなく、あくまで論理的な連結である。
データの読み書きの管理には、書き込み位置と読み出し位置をそれぞれ指し示す二つのポインタを使う。データを一つ追加すると書き込みポインタが一つ進み、一つ取り出すと読み出しポインタが一つ進む。両者が同じ位置にあれば「空」、書き込みポインタが読み出しポインタの一つ手前まで追いついていれば「満杯」と判断する。空と満杯の区別を確実にするため、あえて一要素分を未使用のままにしておく実装もある。
バッファが満杯の状態で新たなデータが届いた場合、古いデータを上書きするか新しいデータを捨てるかを選ぶ必要がある。ログの保存など「常に最新の一定件数だけ残せればよい」用途では上書きが、通信データの受信など欠落をなるべく避けたい用途ではデータを捨てずに処理を待機させる方式が選ばれる。
メモリの確保・解放を繰り返す必要がなく、処理負荷が低いため、データが途切れなく流れ続ける場面に向いている。キーボード入力の受け付け、ネットワークのパケット送受信管理、音声や動画のストリーミング再生、センサーデータの一時保存など、幅広い用途で使われている。並列に動作する複数の装置やプログラムが同時にアクセスする可能性がある場合は排他制御が必要になるが、書き込み側と読み出し側がそれぞれ一つずつであれば、ロックなしで安全に動作する軽量な実装も可能である。