解释lz4双缓冲区示例

时间:2015-02-17 13:38:20

标签: c compression lz4

在lz4示例中,有一个名为doublebuffer" https://github.com/Cyan4973/lz4/blob/master/examples/blockStreaming_doubleBuffer.c"。这在读 - 压缩循环期间使用char inpBuf[2][BLOCK_BYTES]并交替使用inpBuf [0] [],inpBuf [1] []。

我无法理解这一点的好处。为什么不使用单个缓冲区?我错过了什么?

1 个答案:

答案 0 :(得分:2)

双缓冲的好处是更好的压缩比。这仅在您没有足够的内存以将整个对象/文件作为单个块放入内存时才有用。

这并不明显。所以它值得比较检查。

如果您想更直接地体验它,可以进行此练习:

1)压缩文件,将其切割成4 KB的块,并独立压缩每个块。注意最终压缩比。

2)压缩相同的文件,但使用带有2个4 KB块的双缓冲区,应用与示例中提供的方法相同的方法。注意最终压缩比,应该大大改进。

3)对于更合适的比较,重做测试1,但这次使用8 KB独立块,这样实现2& 3使用相同数量的内存。您应该再次注意到实现2提供了更好的压缩率。

4)如果使用LZ4的“HC”版本而不是“快速”版本,则比率差异更加明显。

所以,总结一下:

  • 如果您有足够的内存将整个对象/文件包含在内存中,则无需使用此方法
  • 如果必须将输入数据剪切为较小的块,则可以选择通过使用双缓冲区而不是独立块来体验更好的压缩率。缺点是设置起来比较复杂。