リング
バッファ(ring buffer)は、サーキュラー
バッファ(circular buffer)や環状
バッファとも呼ばれる、データの一時的な保管場所です。その最大の特徴は、
バッファ領域がリング状に配置されている点です。これにより、
バッファの終端と先端が論理的に連結され、データが循環的に利用できるようになります。
仕組み
リング
バッファは、一般的にメモリ効率の良い
配列を用いて実装されます。しかし、物理的に
配列をリング状に配置することは不可能なため、インデックス(添え字)を
バッファサイズで割った余りを求めることで、論理的にリング構造を実現します。この正規化処理により、インデックスが
バッファの終端を超えると先頭に戻り、負のインデックスは終端に進むため、
バッファ内を循環的にアクセスできます。
正規化には通常、剰余演算が用いられますが、プロセッサによっては剰余演算が遅いため、
バッファサイズを2のべき乗に切り上げ、
ビットごとの
論理積を用いる最適化が施されることがあります。ただし、メモリ使用量が限られる場合は、剰余演算や条件分岐を用いて
バッファサイズを調整することも可能です。これらの最適化は、
配列のインデックスが0から始まる「0
オリジン」の場合に適用されます。1から始まる「1
オリジン」などの場合は、事前に0
オリジンに換算する必要があります。リング
バッファのインデックスは、数論的には剰余類を構成します。
類似の機構
アナログ記録のエンドレステープは、物理的にリング構造を持つため、リング
バッファの一例と捉えることもできます。
用途
リング
バッファは、動画や音楽再生時の
バッファリングによく利用されます。この際、データの書き込み位置と読み込み位置が衝突する可能性があります。また、ストリーミングなどで
バッファへのデータ蓄積が再生速度より遅れると、再生が一時停止する
バッファ待ちが発生します。
まとめ
リング
バッファは、データの流れを効率的に管理するための重要な技術です。その柔軟性と効率性から、様々な分野で活用されています。
関連項目
配列
キュー (コンピュータ)
* 両端キュー