C で循環バッファーを実装しようとしていますが、ウィキペディアでこの例に出くわしました (2014 年 7 月に削除されました)。バッファの最後から最初にラップアラウンドする読み取りが自動的に処理されるため、バッファから読み取る人にとって本当に素晴らしいインターフェイスを提供するように見えます。したがって、すべての読み取りは連続しています。
ただし、メモリマッピングや仮想メモリの経験があまりなく、それが何をしているのかを完全に理解しているかどうかわからないため、すぐに使用できるかどうかは少しわかりません。
私が理解していると思うのは、共有メモリファイルをバッファのサイズでメモリに2回マッピングしていることです。次に、データがバッファに書き込まれるたびに、メモリ内の 2 つの場所に一度に表示されます。これにより、すべての読み取りを連続させることができます。
本当に素晴らしいのは、POSIX メモリ マッピングの経験が豊富な人がコードをざっと見て、使用されている基本的なメカニズムが本当に効率的かどうかを教えてくれることです。たとえば、共有メモリに使用される /dev/shm 内のファイルは常に RAM に保持されるか、ある時点でハード ドライブに書き込まれる可能性がある (パフォーマンス ヒット) と考えるのは正しいでしょうか? 注意すべき落とし穴はありますか?
現状では、おそらく現在のプロジェクトにはもっと簡単な方法を使用するつもりですが、将来のためにツールボックスに入れておくために、これを理解しておくとよいでしょう。
お時間をいただきありがとうございます。