• ベストアンサー

リングバッファって何ですか

beefisdeadの回答

回答No.1

はい、そうです。 一定の容量を取っておいて、アドレスの最後と最初とが繋がっているかのように(プログラム上)扱うものをリングバッファと呼んでいます。 音楽の再生なんかではほぼ必ずリングバッファが使われます。一秒程度のデータをメモリに展開しておいて、それを二分割か四分割し、再生位置が切れ目に来るとイベントが起きてバッファに新しいデータを書き込みます。走る人の前の方に新しく道が出来ていくような具合です。 こういう風にすると、たとえば650MBの音楽CDを再生するときでも、バッファは1秒分だけ持てば良いことになります。

noname#150259
質問者

お礼

リングバッファが どういうものか理解することが できました。 回答ありがとうございました。

noname#150259
質問者

補足

素早い回答ありがとうございます。 私の持っていたイメージが当たっていたようですね。 音楽の再生で用いられるようですが、確認させて ください! (物分りが悪くて申し訳ありません) <今思っているイメージ> 要素数5個の配列をリングバッファに例えてみます。 ちなみに■が読み取られていない新しいデータ、 □がすでに読み取られた古いデータとします。 最初にバッファいっぱいまでデータを書き込んでおきます。(一秒程度) ■■■■■ 0, 1, 2, 3, 4 この状態で、左から順にCPUがデータを読み取っていく時、 0が読み取られ、CPUは次に1を読みに行きます。 □■■■■ この時に、0の位置に新しいデータを書き込んでおきます。 ■□■■■ CPUが1を読み取り、2を読みに行く時には、2に新しいデータを 書き込んでおく…。 こんなイメージを持ったのですが、間違っていますか?

関連するQ&A

  • バッファオーバーフローで疑問があります。

    スタックのバッファオーバーフローで、バッファオーバーフローを起こすことで、変数領域の内容が上書きされ、さらにスタックのその他の領域(サブルーチンの戻りアドレスなど)までも書き換わってしまうとありますが、なぜそんなことが起きるのでしょうか? 私のイメージ的に、スタックの内容が以下のようだとして、 |          | | 変数領域(B) | |------------| | 変数領域(A) | |------------| | SFP       | |------------| | 戻りアドレス | |------------| | 関数の引数  | |------------| バッファオーバーフローが起きたとしても上書きされるのは 変数領域A,Bだと思ったのですが、スタックには最大領域でも決まっていてそれおも超えるデータ量の場合は、領域いっぱいまですべて上書くようにでもなっているのでしょうか? 気になって仕方がありません。 どうかよろしくお願いいたします。

  • バッファリング処理を高速化したいです。

    バッファリング処理を高速化したいです。 perlのプログラムで性能がでなくて困っています。 ファイルの中身からレコードヘッダを検索しつつ可変長なレコードの件数をカウントするツールで バッファリングというかストリーミングっぽい処理をしているのですが 思いの外、性能が出ずこまっています。 (600MBのテキストで10分弱くらい、予定では1分程度で終わる見込みでした) とりあえず、非効率そうなのは、1レコード取得する部分と下記のようなバッファシフトの部分くらいなのですが バッファシフトについて何かもっとよい書き方はありますでしょうか? 処理的なイメージはこんな感じになっています。 LOOP_A: read(IN, $readbuf, 10240); $buf .= $readbuf; LOOP_B: ... レコード長の計算 ... バッファ内にレコード長以上なければ、LOOP_Aへ $buf = substr($buf,$reclen); # 処理済みレコードの削除 LOOP_B へ substr()の部分を C的にいうと先頭アドレスだけ移動するような書き方ができれば一番なのですが~ 1レコード取得は正規表現で探しているのですがこちらはもうすこし調べてからにしようと思います。

    • ベストアンサー
    • Perl
  • リング バッファがオーバーフローでフリーズします。

    最近頻繁にフリーズします。しばらくすると動くようになるのですが改善したいです。パソコンは、VAIO PCG-R505V/BD WindowsXPSP2です。 イベントビューアを見ると、以下のメッセージがたくさんありました。 システム ソース:i8042prt 種類:情報 受信マウス データを格納するリング バッファがオーバーフローしました (バッファ サイズは、デバイス マネージャ内の PS/2 マウス プロパティを使用して構成できます)。 あと、イベントビューアアプリケーションのログに ソース:Applicaton Hang 種類:エラー ハングしているアプリケーション iexplore.exe、バージョン 6.0.2900.2180、ハング モジュール hungapp、バージョン 0.0.0.0、ハング アドレス 0x00000000. どうすれば断続的なフリーズから解消されますでしょうか。 対処方法をご存知の方いらっしゃいましたら教えてください。 どうぞよろしくお願いいたします。

  • 秀丸の削除バッファの拡張

    秀丸でバックスペースやデリートなどで削除した文字列を復活させようとしても、2バイト文字で20字前後しか復活できないことがあります。「削除バッファ」(この呼び方が正しいか分かりません)の領域が少ないのかな?と考えていますが、大量に復活できる時とそうでない時があるようです。確か、VZエディターでは削除バッファの容量を指定できたと記憶していますが、秀丸ではできないのでしょうか? 秀丸のバージョンは3.19、OSは98です。

  • Oリング使用内径について

    Oリングについて質問させて下さい。 現在、外形27.2の鉄パイプに合うOリングを探しています。 この鉄パイプは摺動するため、運動用Oリングが適当だと思うのですが、JIS規格に良いサイズが無く困っております。 この様な場合、内径25.7のOリングを使用しても良いものかどうか教えて頂きたく。 (Oリングは固定で、鉄パイプがOリング内径部を摺動するイメージです) 宜しくお願い致します。

  • プログラミングの問題が分かりません。どなたか助けて

    こんな問題が出たのですがまったくもってわかりませんだれか助けてください センサーから入力される符号付き8ビット(char)の入力を一定期間ため込み,値が入力される度に,その平均値を計算し続けるシステムを考える.実装の方法にはいろいろ種類があるが,ここでは,配列をリングバッファとして利用する.リングバッファは,実際にデータを蓄える buffer という名の char 型の配列,最後にサンプル値を代入した位置を示す変数 pos という名の int 型の変数および現在のデータの総和を示す int 型変数 sum を要素に持つ構造体で作成する.リングバッファに値が挿入されるときは,以下の作業を行う. pos を一つ増やす pos がバッファのサイズを超えていたら pos を 0 にする sum から pos の位置のバッファの値を引く リングバッファに挿入したい値を pos の位置のバッファに書く 今挿入した値を sum に足す sum をバッファの長さで割り算して平均値を出力する ここでは,効果的な計算のために,リングバッファのサイズを 128 とする.そのため,変数 pos は 0 から 127 までの値を持つことになる. という問題でこのプログラムを書いてみたいのですがわかりません どなたか教えてくれませんか?

  • OpenCV cvLoadImageについて

    OpenCVで画像判定プログラムを作成しています。 大まかなプログラムは出来、現在細かなデバックを行っています。 現在、問題として、メモリーリークが発生しているみたいです。 ファイルを読み込む時、 IplImage *sourceImage; sourceImage=cvLoadImage("image/lena.jpg",CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR ); cvReleaseImage( &sourceImage ); としますが、これは読み込んだバッファー等の情報がsourceImageに書き込まれ、最後にcvReleaseImage( &sourceImage );を実行する事により、バッファー等のファイルを読み込む為に確保されだ領域が削除されると理解しています。 今までの私のC言語でのプログラミングの経験では、先ずバッファーを確保し、そこにファイルを読み込むと言う事を行って来ましたので、ファイルの次のレコードを読み込む場合はそのバッファーに上書きされて読む事ができました。 OpenCVでは上記sourceImageにバッファー等の情報が渡されますが、次のレコードを読む時はどう成るのでしょうか? 又、新たなバッファー領域が確保されてその情報が渡されるのでしょうか。そうすると、cvReleaseImageでは先に読み込んだバッファーの開放が出来なく成ると思います。それとも、読み込みは同じバッファー領域にされるのでしょうか。 ただ、そうすると、2回目の読み込みは上記、sourceImageで無く、別のIplImageで作成したポインターを指定した時、両方cvReleaseImageで開放してしまうと、同じ領域を2回開放してしまう事に成ってしまいます。 今、自宅なので参照出来ませんが、何か、リセットイメージみたいなコマンドがありました。ひょっとして、次のレコードを読み込む時は毎回このリセットイメージの様なコマンドをcvLoadImageとペアで使用して、最後にcvReleaseImageで開放するのでしょうか。 質問を書いている時に、更に疑問が出て来ました。もし、リセットイメージコマンドがあるとして、これを掛けた後、データーを読み込みもせず、cvReleaseImageもかけなかった時はメモリーリークは発生するのでしょうか。 この辺の動作が分かりません、お分かりに成る方、宜しくご教授下さい。

  • 画像からあるサイズの領域をくりぬいて保存できるツール

    大量に画像があり、その中からどの画像も同じサイズの領域をくりぬきたいのですが、何か言いフリーウェアは無いでしょうか ペイントでも出来ますが量がすごく多いので毎回領域選択するのがとても大変です、サイズがずれやすいし くりぬくサイズを固定出来るような イメージ的にはクッキーの型を抜くような感じで画像をくりぬけるような感じです

  • NTBACKUPにてお聞きします

    NTBACKUPにてお聞きします Windows2003ServerのNtbackupにて、LANDISKにバックアップするようにスケジュール設定しているのでが、DISKの容量に関係して4回で空きエリアが一杯になり、5回目以降失敗してしまいます。 一杯になったら、古い順に上書きしていきたいのですが、どのように設定したらいいのかよろしいでしょうか。よろしくお願いします。

  • ごみ箱がいっぱいになるとき

    基本的なことなんですが、、、 ごみ箱って、いっぱいになるとどうなるんですか。 ごみ箱には「最大サイズ」というのが設定できるのですが、この最大サイズになった場合です。 いっぱいになっても次から次へとファイルを削除してごみ箱に移動すると、古いものから順に消えてくれるんですか? (もしそうでないなら、そのように古いものから順に消えていってくれるようにするにはどうすればよいのですか?) 私は適当にごみ箱の中を空にしているので、いっぱいになった記憶がありません。 OSはWindows98SEです。