Для эмулятора Радио-86РК на Maximite мне потребовалась библиотека для сжатия. У меня там есть виртуальный ROM-диск, а так как файлов порядочно, около мегабайта в сумме, и так как у PIC32 только 512Кб флэша, я решил попробовать сжать данные в процессе сборки бинаря и разжимать их налету уже внутри PIC’а.
Итак, требования к библиотеке:
Нашлось два кандидата:
Обе библиотеки собрались без сучка и задоринки. miniz дает на моих данных 0.78 сжатия, minilzo - 0.71. Оба не дают вместить все в 512К.
В целом мне miniz понравился больше с точки зрения функциональности. К тому же эта библиотека вообще не требует дополнительной памяти для декомпрессии, а использует только выходной буфер. Для minilzo требуется статический буфер на 16Кб.
P.S. Попробовал я еще XZ Embedded (LZMA2). Там, вроде по экспериментам получалось сжать гораздо сильнее, но там требуется интерфейс malloc/free, поэтому сходу собрать под PIC32 не получилось.