为什么 7-Zip 要缩小 257 和 258 个字的大小?

为什么 7-Zip 要缩小 257 和 258 个字的大小?

压缩字的大小通常是 2 的幂。但是,7-Zip 有一些例外:

  • Deflate 有 256 和 258 个字的大小。
  • Deflate64 有 256 和 257 个字长。

这些看起来如此微不足道且奇怪的增长。其原因/目的是什么?

下面是一张我所谈论内容的图片:

在此处输入图片描述

答案1

7-Zip 实际上并未显示 Deflate 和 Deflate64 能够处理的所有字长。它仅显示部分样本。Deflate 实际上能够处理 3-258 之间的所有整数增量。由于模式匹配在仅使用 1-2 个变量时不可能或没有用,因此跳过了这些数量。因此,Deflate 的字长跨度实际上是 2 的幂。由于“1”和“2”不是 Deflate 可能的字长选择,因此您需要从最大大小 258 中减去 2,即 256。

至于 Deflate64,它能够处理 3-257 之间的所有整数增量。258 实际上用作扩展标志,以将字长范围从 3 增加到 65538。但是,7-Zip 根本没有使用此功能。无论如何,如果您从 65538 中 -2,您将得到 65536,这也是 2 的幂。然而,有趣的是,如果扩展标志改为覆盖范围 258-65793,Deflate64 可能会得到改进,因为 3-257 已经覆盖了。

相关内容