BCJ (алгоритм)
В сжатии данных , BCJ сокращение от «ветвь/вызов/переход» , относится к методу, который улучшает сжатие машинного кода путем замены относительных адресов ветвей абсолютными. Это позволяет компрессору Лемпеля-Зива идентифицировать повторяющиеся цели и более эффективно их кодировать. При распаковке обратный фильтр восстанавливает исходную кодировку. Разные фильтры BCJ используются для разных наборов команд , поскольку каждый из них использует разные коды операций для ветвления.
Форма BCJ встречается в формате CAB- файлов Microsoft 1996 года, который фильтрует инструкции CALL x86 для компрессора LZX . [ 1 ] Форматы файлов 7z и xz реализуют BCJ для нескольких архитектур. [ 2 ] ZPAQ называет свой BCJ x86 как «E8E9» после значений кода операции. [ 3 ]
bsdiff , инструмент для дельта-обновлений , позволяет избежать необходимости написания специфичных для архитектуры инструментов BCJ, кодируя побайтовые различия. Это позволяет ему быть намного лучше, чем инструменты типа «сопоставить и скопировать», такие как VCDIFF, [ 4 ] что дает размер вывода всего 6% для Google Chrome. Однако кабачок Google, который добавляет уровень явной дизассемблирования, способен создавать различия в 9 раз меньше. [ 5 ]
Эффект
[ редактировать ]Для sqashfs образа живого образа Fedora Linux 31 использование x86 BCJ экономит дополнительные 30 МБ из сжатого размера ~1,7 ГБ, но удваивает время установки. [ 6 ]
Ссылки
[ редактировать ]- ^ «cabextract: бесплатное программное обеспечение для извлечения CAB-файлов Microsoft» . Проверено 17 марта 2020 г.
- ^ «Формат файла .xz» .
- ^ «ЗПАК» . mattmahoney.net .
- ^ Колин Персиваль , Наивные различия исполняемого кода, http://www.daemonology.net/bsdiff/ , 2003.
- ^ «Обновления программного обеспечения: Кабачки» . www.chromium.org .
- ^ «Изменения/ОптимизацияSquashFS — Fedora Project Wiki» . Fedoraproject.org .