Okay, some details about the new engine:
This compressor uses a LZ77-PM compression – an LZ77 coder with some context related tricks (A younger brother of ROLZ2). It uses a Lazy Matching trick, so you can directly compare the listed results to the QUAD with Normal mode. The most important thing about this engine is that I finally implement a very tricky hashing. With hashing from QUAD, this engine is nearly 20...100 times slower
. With the new scheme lzpm is fairly fast. The decompression is very fast on many files it is even faster than QUAD, however, I noticed that with large text files QUAD has a higher decompression speed. One important thing, with 16 MB buffer, lzpm needs just ~20 MB for decompression.
Memory usage
For compression: Hash table size (64 MB) + Buffer size (16 MB) + 4 MB + 256 KB
For decompression: Buffer size (16 MB) + 4 MB + 256 KB
Hash table size can vary. But I've found that 64 MB version provides good enough results – the compression becomes just slightly lower compared to the brute-force approach.
Buffer can be also variable sized. Check out some testing results:
ENWIK8
16 MB: 29,092,328 bytes
32 MB: 28,956,075 bytes
64 MB: 28,903,463 bytes
ENWIK9
16 MB: 253,267,637 bytes
32 MB: 252,030,819 bytes
64 MB: 251,300,786 bytes
PAK0.PAK
16 MB: 94,538,952 bytes
32 MB: 94,382,852 bytes
64 MB: 94,292,727 bytes
Overall, the 16 MB buffer is enough. Again, keeping in mind the low memory usage for decompression.
Okay, check out some other results with standard configuration (16 MB buffer + 64 MB hash table):
A10.jpg: 835,031 bytes
world95.txt: 613,849 bytes
acrord32.exe: 1,681,314 bytes (Note that lzpm has no E8/E9 transformer)
book1: 270,122 bytes
pht.psd: 1,271,658 byte
3200.txt: 5,065,137 bytes
The development in progress...