在lz4示例中,有一个名为doublebuffer" https://github.com/Cyan4973/lz4/blob/master/examples/blockStreaming_doubleBuffer.c"。这在读 - 压缩循环期间使用char inpBuf[2][BLOCK_BYTES]
并交替使用inpBuf [0] [],inpBuf [1] []。
我无法理解这一点的好处。为什么不使用单个缓冲区?我错过了什么?
答案 0 :(得分:2)
双缓冲的好处是更好的压缩比。这仅在您没有足够的内存以将整个对象/文件作为单个块放入内存时才有用。
这并不明显。所以它值得比较检查。
如果您想更直接地体验它,可以进行此练习:
1)压缩文件,将其切割成4 KB的块,并独立压缩每个块。注意最终压缩比。
2)压缩相同的文件,但使用带有2个4 KB块的双缓冲区,应用与示例中提供的方法相同的方法。注意最终压缩比,应该大大改进。
3)对于更合适的比较,重做测试1,但这次使用8 KB独立块,这样实现2& 3使用相同数量的内存。您应该再次注意到实现2提供了更好的压缩率。
4)如果使用LZ4的“HC”版本而不是“快速”版本,则比率差异更加明显。
所以,总结一下: