123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- LZMA SDK 18.05
- --------------
- LZMA SDK provides the documentation, samples, header files,
- libraries, and tools you need to develop applications that
- use 7z / LZMA / LZMA2 / XZ compression.
- LZMA is an improved version of famous LZ77 compression algorithm.
- It was improved in way of maximum increasing of compression ratio,
- keeping high decompression speed and low memory requirements for
- decompressing.
- LZMA2 is a LZMA based compression method. LZMA2 provides better
- multithreading support for compression than LZMA and some other improvements.
- 7z is a file format for data compression and file archiving.
- 7z is a main file format for 7-Zip compression program (www.7-zip.org).
- 7z format supports different compression methods: LZMA, LZMA2 and others.
- 7z also supports AES-256 based encryption.
- XZ is a file format for data compression that uses LZMA2 compression.
- XZ format provides additional features: SHA/CRC check, filters for
- improved compression ratio, splitting to blocks and streams,
- LICENSE
- -------
- LZMA SDK is written and placed in the public domain by Igor Pavlov.
- Some code in LZMA SDK is based on public domain code from another developers:
- 1) PPMd var.H (2001): Dmitry Shkarin
- 2) SHA-256: Wei Dai (Crypto++ library)
- Anyone is free to copy, modify, publish, use, compile, sell, or distribute the
- original LZMA SDK code, either in source code form or as a compiled binary, for
- any purpose, commercial or non-commercial, and by any means.
- LZMA SDK code is compatible with open source licenses, for example, you can
- include it to GNU GPL or GNU LGPL code.
- LZMA SDK Contents
- -----------------
- Source code:
- - C / C++ / C# / Java - LZMA compression and decompression
- - C / C++ - LZMA2 compression and decompression
- - C / C++ - XZ compression and decompression
- - C - 7z decompression
- - C++ - 7z compression and decompression
- - C - small SFXs for installers (7z decompression)
- - C++ - SFXs and SFXs for installers (7z decompression)
- Precompiled binaries:
- - console programs for lzma / 7z / xz compression and decompression
- - SFX modules for installers.
- UNIX/Linux version
- ------------------
- To compile C++ version of file->file LZMA encoding, go to directory
- CPP/7zip/Bundles/LzmaCon
- and call make to recompile it:
- make -f makefile.gcc clean all
- In some UNIX/Linux versions you must compile LZMA with static libraries.
- To compile with static libraries, you can use
- LIB = -lm -static
- Also you can use p7zip (port of 7-Zip for POSIX systems like Unix or Linux):
-
- http://p7zip.sourceforge.net/
- Files
- -----
- DOC/7zC.txt - 7z ANSI-C Decoder description
- DOC/7zFormat.txt - 7z Format description
- DOC/installer.txt - information about 7-Zip for installers
- DOC/lzma.txt - LZMA compression description
- DOC/lzma-sdk.txt - LZMA SDK description (this file)
- DOC/lzma-history.txt - history of LZMA SDK
- DOC/lzma-specification.txt - Specification of LZMA
- DOC/Methods.txt - Compression method IDs for .7z
- bin/installer/ - example script to create installer that uses SFX module,
- bin/7zdec.exe - simplified 7z archive decoder
- bin/7zr.exe - 7-Zip console program (reduced version)
- bin/x64/7zr.exe - 7-Zip console program (reduced version) (x64 version)
- bin/lzma.exe - file->file LZMA encoder/decoder for Windows
- bin/7zS2.sfx - small SFX module for installers (GUI version)
- bin/7zS2con.sfx - small SFX module for installers (Console version)
- bin/7zSD.sfx - SFX module for installers.
- 7zDec.exe
- ---------
- 7zDec.exe is simplified 7z archive decoder.
- It supports only LZMA, LZMA2, and PPMd methods.
- 7zDec decodes whole solid block from 7z archive to RAM.
- The RAM consumption can be high.
- Source code structure
- ---------------------
- Asm/ - asm files (optimized code for CRC calculation and Intel-AES encryption)
- C/ - C files (compression / decompression and other)
- Util/
- 7z - 7z decoder program (decoding 7z files)
- Lzma - LZMA program (file->file LZMA encoder/decoder).
- LzmaLib - LZMA library (.DLL for Windows)
- SfxSetup - small SFX module for installers
- CPP/ -- CPP files
- Common - common files for C++ projects
- Windows - common files for Windows related code
- 7zip - files related to 7-Zip
- Archive - files related to archiving
- Common - common files for archive handling
- 7z - 7z C++ Encoder/Decoder
- Bundles - Modules that are bundles of other modules (files)
-
- Alone7z - 7zr.exe: Standalone 7-Zip console program (reduced version)
- Format7zExtractR - 7zxr.dll: Reduced version of 7z DLL: extracting from 7z/LZMA/BCJ/BCJ2.
- Format7zR - 7zr.dll: Reduced version of 7z DLL: extracting/compressing to 7z/LZMA/BCJ/BCJ2
- LzmaCon - lzma.exe: LZMA compression/decompression
- LzmaSpec - example code for LZMA Specification
- SFXCon - 7zCon.sfx: Console 7z SFX module
- SFXSetup - 7zS.sfx: 7z SFX module for installers
- SFXWin - 7z.sfx: GUI 7z SFX module
- Common - common files for 7-Zip
- Compress - files for compression/decompression
- Crypto - files for encryption / decompression
- UI - User Interface files
-
- Client7z - Test application for 7za.dll, 7zr.dll, 7zxr.dll
- Common - Common UI files
- Console - Code for console program (7z.exe)
- Explorer - Some code from 7-Zip Shell extension
- FileManager - Some GUI code from 7-Zip File Manager
- GUI - Some GUI code from 7-Zip
- CS/ - C# files
- 7zip
- Common - some common files for 7-Zip
- Compress - files related to compression/decompression
- LZ - files related to LZ (Lempel-Ziv) compression algorithm
- LZMA - LZMA compression/decompression
- LzmaAlone - file->file LZMA compression/decompression
- RangeCoder - Range Coder (special code of compression/decompression)
- Java/ - Java files
- SevenZip
- Compression - files related to compression/decompression
- LZ - files related to LZ (Lempel-Ziv) compression algorithm
- LZMA - LZMA compression/decompression
- RangeCoder - Range Coder (special code of compression/decompression)
- Note:
- Asm / C / C++ source code of LZMA SDK is part of 7-Zip's source code.
- 7-Zip's source code can be downloaded from 7-Zip's SourceForge page:
- http://sourceforge.net/projects/sevenzip/
- LZMA features
- -------------
- - Variable dictionary size (up to 1 GB)
- - Estimated compressing speed: about 2 MB/s on 2 GHz CPU
- - Estimated decompressing speed:
- - 20-30 MB/s on modern 2 GHz cpu
- - 1-2 MB/s on 200 MHz simple RISC cpu: (ARM, MIPS, PowerPC)
- - Small memory requirements for decompressing (16 KB + DictionarySize)
- - Small code size for decompressing: 5-8 KB
- LZMA decoder uses only integer operations and can be
- implemented in any modern 32-bit CPU (or on 16-bit CPU with some conditions).
- Some critical operations that affect the speed of LZMA decompression:
- 1) 32*16 bit integer multiply
- 2) Mispredicted branches (penalty mostly depends from pipeline length)
- 3) 32-bit shift and arithmetic operations
- The speed of LZMA decompressing mostly depends from CPU speed.
- Memory speed has no big meaning. But if your CPU has small data cache,
- overall weight of memory speed will slightly increase.
- How To Use
- ----------
- Using LZMA encoder/decoder executable
- --------------------------------------
- Usage: LZMA <e|d> inputFile outputFile [<switches>...]
- e: encode file
- d: decode file
- b: Benchmark. There are two tests: compressing and decompressing
- with LZMA method. Benchmark shows rating in MIPS (million
- instructions per second). Rating value is calculated from
- measured speed and it is normalized with Intel's Core 2 results.
- Also Benchmark checks possible hardware errors (RAM
- errors in most cases). Benchmark uses these settings:
- (-a1, -d21, -fb32, -mfbt4). You can change only -d parameter.
- Also you can change the number of iterations. Example for 30 iterations:
- LZMA b 30
- Default number of iterations is 10.
- <Switches>
-
- -a{N}: set compression mode 0 = fast, 1 = normal
- default: 1 (normal)
- d{N}: Sets Dictionary size - [0, 30], default: 23 (8MB)
- The maximum value for dictionary size is 1 GB = 2^30 bytes.
- Dictionary size is calculated as DictionarySize = 2^N bytes.
- For decompressing file compressed by LZMA method with dictionary
- size D = 2^N you need about D bytes of memory (RAM).
- -fb{N}: set number of fast bytes - [5, 273], default: 128
- Usually big number gives a little bit better compression ratio
- and slower compression process.
- -lc{N}: set number of literal context bits - [0, 8], default: 3
- Sometimes lc=4 gives gain for big files.
- -lp{N}: set number of literal pos bits - [0, 4], default: 0
- lp switch is intended for periodical data when period is
- equal 2^N. For example, for 32-bit (4 bytes)
- periodical data you can use lp=2. Often it's better to set lc0,
- if you change lp switch.
- -pb{N}: set number of pos bits - [0, 4], default: 2
- pb switch is intended for periodical data
- when period is equal 2^N.
- -mf{MF_ID}: set Match Finder. Default: bt4.
- Algorithms from hc* group doesn't provide good compression
- ratio, but they often works pretty fast in combination with
- fast mode (-a0).
- Memory requirements depend from dictionary size
- (parameter "d" in table below).
- MF_ID Memory Description
- bt2 d * 9.5 + 4MB Binary Tree with 2 bytes hashing.
- bt3 d * 11.5 + 4MB Binary Tree with 3 bytes hashing.
- bt4 d * 11.5 + 4MB Binary Tree with 4 bytes hashing.
- hc4 d * 7.5 + 4MB Hash Chain with 4 bytes hashing.
- -eos: write End Of Stream marker. By default LZMA doesn't write
- eos marker, since LZMA decoder knows uncompressed size
- stored in .lzma file header.
- -si: Read data from stdin (it will write End Of Stream marker).
- -so: Write data to stdout
- Examples:
- 1) LZMA e file.bin file.lzma -d16 -lc0
- compresses file.bin to file.lzma with 64 KB dictionary (2^16=64K)
- and 0 literal context bits. -lc0 allows to reduce memory requirements
- for decompression.
- 2) LZMA e file.bin file.lzma -lc0 -lp2
- compresses file.bin to file.lzma with settings suitable
- for 32-bit periodical data (for example, ARM or MIPS code).
- 3) LZMA d file.lzma file.bin
- decompresses file.lzma to file.bin.
- Compression ratio hints
- -----------------------
- Recommendations
- ---------------
- To increase the compression ratio for LZMA compressing it's desirable
- to have aligned data (if it's possible) and also it's desirable to locate
- data in such order, where code is grouped in one place and data is
- grouped in other place (it's better than such mixing: code, data, code,
- data, ...).
- Filters
- -------
- You can increase the compression ratio for some data types, using
- special filters before compressing. For example, it's possible to
- increase the compression ratio on 5-10% for code for those CPU ISAs:
- x86, IA-64, ARM, ARM-Thumb, PowerPC, SPARC.
- You can find C source code of such filters in C/Bra*.* files
- You can check the compression ratio gain of these filters with such
- 7-Zip commands (example for ARM code):
- No filter:
- 7z a a1.7z a.bin -m0=lzma
- With filter for little-endian ARM code:
- 7z a a2.7z a.bin -m0=arm -m1=lzma
- It works in such manner:
- Compressing = Filter_encoding + LZMA_encoding
- Decompressing = LZMA_decoding + Filter_decoding
- Compressing and decompressing speed of such filters is very high,
- so it will not increase decompressing time too much.
- Moreover, it reduces decompression time for LZMA_decoding,
- since compression ratio with filtering is higher.
- These filters convert CALL (calling procedure) instructions
- from relative offsets to absolute addresses, so such data becomes more
- compressible.
- For some ISAs (for example, for MIPS) it's impossible to get gain from such filter.
- ---
- http://www.7-zip.org
- http://www.7-zip.org/sdk.html
- http://www.7-zip.org/support.html
|