2

インメモリ デバッグ ロギング メカニズムの実装に取り​​組んでいます。要件は次のとおりです。

  • デバッグ メッセージを格納するためのバッファは固定されています。4KB としましょう。
  • バッファに書き込まれるデバッグ メッセージのサイズは任意で、10 バイトまたは 2000 バイト以上になる可能性があります。
  • バッファがいっぱいになると、デバッグ メッセージをローテーションする必要があります。
  • デバッグ メッセージは、バッファに挿入された順序で取得する必要があります。

すべてのバッファが使用されたときにバッファを収集するために、これを muncher を持つ単一のリンクされたリストとして実装することを考えています。

皆さんはどう思いますか ?ポインタやアドバイスをいただければ幸いです。

0_l_0

4

1 に答える 1

3

返信ありがとうございます。これが私が完成させた実装です。

  • リングに挿入されるすべてのメッセージには、メッセージの長さがプレフィックスとして付けられます
  • ヘッド ポインターとテール ポインター、および ring_size があります。
  • リングバッファに書き込まれるすべてのメッセージに対して、次のチェックを実行します

    • 新しいメッセージ用のリング バッファにスペースはありますか?
    • 新しいメッセージを挿入するためのスペースを確保するために、メッセージのヘッドを移動する必要がありますか? はいの場合、新しいメッセージ用の十分なスペースができるまでヘッドを移動して、最も古いメッセージをむさぼり食う. メッセージを挿入し、末尾を更新します。
    • 私が考慮しなければならないもう 1 つのことは、バッファーとの間でメッセージを読み書きする際のラップアラウンドです。たとえば、挿入される新しいメッセージがリング境界を超えている場合、これは、バッファーの最後に到達したときにラップ アラウンドする特別な書き込み操作です。基本的に、ラップアラウンドを使用したメッセージの読み取り/書き込みは、2 つの読み取り/書き込み操作になります。リングの終わりまで 1 回の書き込み/読み取りと、バッファーの先頭からのもう 1 回の読み取り/書き込み。
  • head は最も古いメッセージを指し、メッセージの前に長さを付けてリングをトラバースできるため、順序付けは問題になりません。

ゼロワン 0_l_0

于 2013-04-29T18:38:56.977 に答える