计算压缩算法中的最大边界是否必要?

问题描述 投票:0回答:1

我一直在使用一些压缩算法,在压缩之前,您显然应该通过以下调用获得可能的压缩结果的最大范围:

ZSTD_compressBound(source_length);
LZ4_compressBound(source_length);

我想知道,因为当您实际调用压缩函数时,您会传入最大边界,以便被调用的函数不会溢出您提供的缓冲区,是否可以放弃此 compressBound 调用,只需传入一个缓冲区它的大小与原始未压缩的大小相同,并将其传递给最大大小。没有人对压缩超过一定大小的任何内容感兴趣,因为您不会获得任何好处,并且会跳过额外的调用,并且会更好地提高性能。我可以这样做吗?我知道答案是它可能取决于算法,但我对压缩算法一无所知,并且想知道是否有了解这些知识的人可以解释我是否应该能够做到这一点。

最大界限的计算会占用 CPU 资源吗?

compression lz4 zstd
1个回答
0
投票

当您在一次调用中压缩所有数据时,这些函数非常方便。然后,您可以分配一个足够大的输出缓冲区来容纳所有压缩数据。

对于流式压缩,多次调用,不需要绑定。您只需不断提供更多输入并消耗更多输出,直到压缩完成。

没有人对像你这样压缩超过一定尺寸的东西感兴趣 没有得到任何好处

我不知道你想说什么。

是否可以放弃这个 compressBound 调用,只需传入一个 与原始未压缩大小相同的缓冲区

是的,您可以通过任何您喜欢的内容。但是,如果您尝试在一次调用中完成压缩,有时会因为没有足够的输出空间而失败。这种情况并不罕见,因为您可能提供已经压缩的数据,因此无法进一步压缩。相反,它会稍微扩大。

并且跳过了额外的调用,并且性能更好

您是指

*compressBound()
电话吗?跳过它不会有任何性能提升。该函数是对输入大小的非常简单的计算。通常只需进行一些转变和添加。您不妨获取边界并分配正确大小的缓冲区。此外,不可压缩数据的最大可能扩展非常小,通常只是百分之几和几个字节。

© www.soinside.com 2019 - 2024. All rights reserved.