понадобилось мне тут быстропожать всякое, а zlib расчехлять неохота: жирный, страшный, лаяй. вспомнил про один свой старенький компрессор на си, портанул. благо, там кода-то…

чистейший LZ, выдаёт битовый поток, сжимает и разжимает строго из памяти в память. компрессору надо source_size*16 байт хипа и чуть более 4 кб стека, декомпрессору ничего кроме выходного буфера. размер распакованых данных для декомпрессора надо знать заранее, и буфер передавать соответствующего размера (это элементарно чинится, просто мне не надо).

чтобы вы понимали прелесть: размер компрессора около двухсот строчек (~6 кб исходника), декомпрессора около ста строчек (~3 кб исходника). они независимы, можно просто копипастить по месту. жмёт получше всяких lz4. параметры в компрессоре лучше не трогать: они методом ненаучной магии подобраны под более-менее производительность и compression ratio на разных наборах данных.

чисто по приколу: на level=normal тарбол "sqlite-autoconf-3360000.tar" у меня жмёт вот так:
packing 11,724,800 bytes...
packed: 3,383,942 in 6.505 seconds

а если вам очень хочется один раз пожать, но хорошо, то жмите с уровнем ultra, будет вот так:
packing 11,724,800 bytes...
packed: 2,800,464 in 397.077 seconds
это, кстати, лучше, чем gzip (ну ещё бы, со словарём в десять мегабайт-то, лол).

декомпрессору, натурально, плевать на уровни сжатия, он ничего дополнительно не требует.