LZMA

来自华夏文化百科
跳转至: 导航搜索

概述

C++ 语言写成的的 LZMA 开放源码压缩库[2]使用了区间编码支持的 LZ77 改进压缩算法以及特殊的用于二进制的预处理程序。数据流、重复序列大小以及重续序列位置单独进行了压缩。LZMA 支持几种散列链变体、二叉树以及基数树作为它的字典查找算法基础。


BCJ / BCJ2 二进制文件压缩

BCJ / BCJ2 压缩工具所附带的 LZMA SDK 包括:在 X86、ARM、PowerPC、IA-64 以及 ARM Thumb 处理器上在压缩之前跳转目标进行归一化处理。对于 x86 平台来说,这是一个近跳转、近调用以及近条件跳转需要从“向后跳 1665 字节”这样的机器语言归一化到“跳转到 5554”这样的格式,但是短跳转及短条件跳转不需要进行这样的处理。尽管 7-Zip BCJ2 使用 32 位的偏移地址,但是 UPX 这样的可执行文件压缩工具当检测到 16 位 DOS 二进制文件格式的时候仍然可以使用 16 位的数值。RAR 压缩工具对 32 位的 x86 可执行文件以及 IA64 Itanium 可执行文件进行偏移地址压缩。BCJ 与 BCJ2 之间的区别在于前者只将近跳转及近调用目标地址转换到归一化的形式,而 BCJ2 只将 x86 平台下的近跳转、近调用及条件近跳转目标分别进行压缩。


7-Zip 实现

GNU通用公共许可证下发布的 7-zip[1] 参考版本有以下几个特点:

  * 高压缩比  * 解压缩代码较小:约 5 KB  * 解压缩时仅需少量存储器(取决于字典大小)  * 可变更字典大小(最大 4 GB)  * 压缩速度:在一部 2GHz 的处理器上运行,约可达到 1MB 每秒的速度。  * 解压缩速度:在一部 2GHz 的处理器上运行,约可达 10-20MB 每秒的速度。  * 支持多线程多内核Pentium 4 处理器的超线程。这个特点使得这个这个算法的解压过程非常适合于嵌入式系统应用的场合。