C言語なら、俺に聞け! <12>
■ このスレッドは過去ログ倉庫に格納されています
0429デフォルトの名無しさん
NGNGリストとバッファの違いが分かってない?
リストでは、挿入/削除される各要素は個別に確保/開放される。その要素を
ポインタを使ってリング状につなげば循環リストだし、双方向につなげば双方向
連結リストになる。要素数は一般には制限なし(メモリサイズだけに制限される)
対してバッファは、固定長のメモリ領域。そのバッファを同一サイズのブロック
に分割して使う。ブロックの利用順序として、ブロックを頭から順に使っていって、
使い切ったら頭に戻るような戦略を採用したものがリングバッファ。
一般には
rp 次に読み込む場所
wp 次に書き込む場所
len 使用中のブロックサイズ
という管理データを用いて、
一つ読み込む
rp = (rp がブロックの最後を指していれば 0 に戻す、そうでなければ rp + 1)
一つ書き込む
wp = (wp がブロックの最後を指していれば 0 に戻す、そうでなければ wp + 1)
ってな感じで操作する。入出力が非同期に行われる FIFO 型のデータを貯めて
おくときに便利。
■ このスレッドは過去ログ倉庫に格納されています