2

在 lz4 示例中,有一个名为双缓冲区的“ https://github.com/Cyan4973/lz4/blob/master/examples/blockStreaming_doubleBuffer.c ”。这char inpBuf[2][BLOCK_BYTES]在读取压缩循环期间使用 a 并交替使用 inpBuf[0][]、inpBuf[1][]。

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

4

1 回答 1

2

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

这并不明显。因此,值得进行比较来检查。

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

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

2) 压缩同一文件,但使用具有 2 个 4 KB 块的双缓冲区,应用与示例中提供的方法相同的方法。注意最后的压缩比,应该会有很大的提高。

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

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

所以,总结一下:

  • 如果您有足够的内存将整个对象/文件包含到内存中,则不需要使用此方法
  • 如果您必须将输入数据切割成更小的块,您可以选择使用双缓冲区而不是独立块来体验更好的压缩比。缺点是设置比较复杂。
于 2015-02-17T18:19:07.550 回答