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