C语言 zlib/miniz:如何为非常低的内存使用配置膨胀?



我有一个嵌入式系统,内存量很低,需要对来自服务器端的zlib-deflated数据包进行充气。通货紧缩可以使用它想要的所有资源,但对于通货膨胀,我将其限制在5 kB以内。压缩后的数据包都是512位。

由于数据包大小较小,我认为在一个块中进行膨胀并使用恰好与需要一样大的缓冲区更便宜。但是现在我已经在miniz中使用了一段时间,试图降低内存使用,并且我发现对于我能做的最简单的实现(稍微修改的miniz示例代码),它在5.5 kB左右达到峰值。现在,我忽略了通货膨胀速度,因为它似乎在任何情况下都足以满足我的要求。我只是想知道在理论上/实践中它能有多小。

我尝试过的事情:

  • 我拒绝了TINFL_LZ_DICT_SIZE,这很有帮助。
  • 我用TINFL_BITBUF_SIZE (32)代替64,这也给了我更多的空间。
  • 我设置了TINFL_FAST_LOOKUP_BITS = 1也有帮助。

我一直在阅读霍夫曼编码,试图理解这些值的作用:

TINFL_MAX_HUFF_TABLES = 3,
TINFL_MAX_HUFF_SYMBOLS_0 = 288,
TINFL_MAX_HUFF_SYMBOLS_1 = 32,
TINFL_MAX_HUFF_SYMBOLS_2 = 19,
TINFL_FAST_LOOKUP_BITS = 1,
TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS

但是我不能说我完全理解它。我可以看到它们与分配的内存直接相关,但我不确定如何正确地更改它们。

所以我正在寻找关于如何使通货膨胀使用尽可能少的内存的建议。或者,对其他可能更适合我实现的库的建议。

谢谢:)

将puff.c视为另一种选择。它从堆栈中分配大约1KB的空间。

最新更新