c-解释lz4双缓冲区示例



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

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

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

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

如果你想更直接地体验,你可以做这个练习:

1) 压缩一个文件,方法是将其切割成4KB的块,并独立压缩每个块。记下最终压缩比。

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

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

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

因此,总结一下:

  • 如果您有足够的内存将整个对象/文件包含到内存中,则不需要使用此方法
  • 如果必须将输入数据剪切成更小的块,可以选择使用双缓冲区而不是独立块来体验更好的压缩比。不利的一面是它的设置更加复杂

最新更新