内存使用量小的 ZLIB
ZLIB with small memory usage
我正在开发嵌入式设备 (STM32),剩余 < 5kb
个空闲闪存。我正在尝试使用 zlib 库压缩 string
。
我创建了函数 HERE 并且它 returns -2
(Z_STREAM_ERROR
).
我做了什么:
- 在
zconf.h
上,我将 MAX_MEM_LEVEL
的值更改为 1
并将 MAX_WBITS
的值更改为 5
以降低内存使用量。但是我还是returns-2
(Z_STREAM_ERROR
).
然后我在 deflate.c
上找到了这个,我不能将 MAX_WBITS
降低到 8
:
if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) {
return Z_STREAM_ERROR;
}
if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */
然后我将它设置为 MAX_MEM_LEVEL
到 1
和 MAX_WBITS
到 8
但是当我尝试编译它时总是 returns region FLASH overflowed by 15960 bytes
.看来我 运行 内存不足。
然后我尝试了另一个例子:
- 跟随 zpipe.c 示例,定义了
CHUNK
到 1024
。
结果还是一样,region FLASH overflowed by 15960 bytes
。
有没有其他方法可以用只剩下 5kb
的 FLASH 内存来做到这一点?
注:
- RAM 也
5kb
剩余。
没有。 deflate 所需的最小 RAM 量为 9K。您可以尝试使用不同的压缩器,例如 lz4.
deflate 代码本身在我的机器上编译为 33K (x86_64 ISA),速度优化。我尝试使用激进的 space 优化进行编译,将其降低到 25K。
我正在开发嵌入式设备 (STM32),剩余 < 5kb
个空闲闪存。我正在尝试使用 zlib 库压缩 string
。
我创建了函数 HERE 并且它 returns -2
(Z_STREAM_ERROR
).
我做了什么:
- 在
zconf.h
上,我将MAX_MEM_LEVEL
的值更改为1
并将MAX_WBITS
的值更改为5
以降低内存使用量。但是我还是returns-2
(Z_STREAM_ERROR
).
然后我在 deflate.c
上找到了这个,我不能将 MAX_WBITS
降低到 8
:
if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) {
return Z_STREAM_ERROR;
}
if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */
然后我将它设置为 MAX_MEM_LEVEL
到 1
和 MAX_WBITS
到 8
但是当我尝试编译它时总是 returns region FLASH overflowed by 15960 bytes
.看来我 运行 内存不足。
然后我尝试了另一个例子:
- 跟随 zpipe.c 示例,定义了
CHUNK
到1024
。
结果还是一样,region FLASH overflowed by 15960 bytes
。
有没有其他方法可以用只剩下 5kb
的 FLASH 内存来做到这一点?
注:
- RAM 也
5kb
剩余。
没有。 deflate 所需的最小 RAM 量为 9K。您可以尝试使用不同的压缩器,例如 lz4.
deflate 代码本身在我的机器上编译为 33K (x86_64 ISA),速度优化。我尝试使用激进的 space 优化进行编译,将其降低到 25K。