我正在以 7z 提供的最佳压缩方式压缩 120 MB 的文件集,并注意到它在峰值时消耗了近 600 MB 的 RAM。
为什么这些压缩程序即使在处理非常小的数据集时也要使用如此多的 RAM,甚至消耗的内存是其数据集未压缩大小的数倍?
只是好奇,我对它的技术方面更感兴趣。
从来没有在技术上进行过压缩,但让我们开始搜索......
7z 帮助文件提到:
LZMA是一种基于 Lempel-Ziv 算法的算法。它提供非常快的解压(比压缩快 10-20 倍)。压缩和解压缩的内存要求也不同(参见 d={Size}[b|k|m] 开关了解详细信息)。
(请注意,维基百科上的 LZ 算法文章没有提到任何有关内存要求的内容。)
d={Size}[b|k|m] 设置LZMA 的字典大小。您必须以字节、千字节或兆字节为单位指定大小。字典大小的最大值为 1 GB = 2^30 字节。LZMA 的默认值在正常模式下为 24 (16 MB),在最大模式 (-mx=7) 下为 25 (32 MB),在超模式下 (-mx=9) 为 26 (64 MB)。如果您未指定集合 [b|k|m] 中的任何符号,则字典大小将计算为 DictionarySize = 2^Size 字节。要解压缩由 LZMA 方法压缩的字典大小为 N 的文件,您需要大约 N 字节的可用内存 (RAM)。
继维基百科关于字典编码器的文章之后,该算法的工作方式似乎是将要压缩的数据与“字典”中的一组数据进行比较,该“字典”必须基于要压缩的原始数据。
不管这本字典是如何构建的,因为它必须保存在内存中,所以 RAM 要求是这本字典的一个函数。由于这个字典不是原始数据,而是一些未压缩的数据结构,它会(可能)比处理的原始数据大。说得通?
| 归档时间: |
|
| 查看次数: |
2173 次 |
| 最近记录: |