2

lz4 の例では、「https://github.com/Cyan4973/lz4/blob/master/examples/blockStreaming_doubleBuffer.c」という名前の doublebuffer があります。これはchar inpBuf[2][BLOCK_BYTES]、read-compress ループ中に a を使用し、inpBuf[0][]、inpBuf[1][] を交互に使用します。

これのメリットが理解できません。単一のバッファを使用しないのはなぜですか? 私は何が欠けていますか?

4

1 に答える 1

2

ダブル バッファの利点は、圧縮率が向上することです。これは、オブジェクト/ファイル全体を単一のブロックとしてメモリに収めるのに十分なメモリがない場合にのみ役立ちます。

これは明らかではありません。したがって、それを確認するために比較する価値があります。

より直接的に体験したい場合は、この演習を行うことができます。

1) ファイルを 4 KB のブロックに分割し、各ブロックを個別に圧縮することにより、ファイルを圧縮します。最終的な圧縮率に注意してください。

2) 同じファイルを圧縮しますが、4 KB のブロックが 2 つあるダブル バッファを使用し、例に示した方法と同じ方法を適用します。最終的な圧縮率に注意してください。大幅に改善されるはずです。

3) より適切な比較のために、テスト 1 をやり直しますが、今回は 8 KB の独立したブロックを使用して、実装 2 と 3 の両方が同じ量のメモリを使用するようにします。ここでも、実装 2 の方が圧縮率が高いことに注意してください。

4) LZ4 の「高速」バージョンよりも「HC」バージョンを使用すると、比率の違いはさらに顕著になります。

要約すると、次のようになります。

  • オブジェクト/ファイル全体をメモリに格納するのに十分なメモリがある場合は、このメソッドを使用する必要はありません
  • 入力データを小さなブロックに分割する必要がある場合は、独立したブロックではなく、ダブル バッファーを使用して圧縮率を向上させることができます。欠点は、セットアップがより複雑であることです。
于 2015-02-17T18:19:07.550 に答える