EugeneRoshal
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору persicum Цитата: Увеличить размер словаря до 8 или 16 гигов; | Если делать на основе нынешнего RAR'овского поиска, то есть, окно (sliding dictionary), хэш и связанный список, то расход памяти при упаковке это 5 размеров окна для 32-битных ссылок и 6 размеров окна для 40-битных ссылок на позиции окна. Не считая затрат на хэш-таблицы. То есть, это где-то 50 гб для 8 гб окна и 100 гб для 16 гб окна. К слову, у меня на компьютере сейчас установлено 32 гб RAM. Цитата: 2) при распаковке, если физической памяти не хватает, сделать swap-file и читать оттуда данные строго последовательно, если потребуется, то несколько раз. | В общем случае ссылки на предыдущие позиции повторяющихся строк идут в произвольном порядке, неупорядоченно. И таких ссылок на дальние дистанции могут быть тысячи или миллионы. Если читать строго последовательно и не кешировать, так и читать придется тысячи или миллионы раз. RAR'овский алгоритм ориентирован на поиск совпадений, начиная с небольшой длины, но на фиксированной дистанции разумного размера. Он плохо масштабируется для задачи поиска только больших совпадающих кусков на очень большой дистанции. Такой алгоритм, по уму, нужно проектировать отдельно. Цитата: Кста, 7-zip жрет память и не стесняется! 6-кратный размер словаря на каждый поток в lzma2. Например, если 8 потоков и словарь 1.5G, получается 1.5*6*8 = 72 гига оперативы!! | Насколько я понимаю, LZMA2 делит поток на полностью независимые блоки и пакует их отдельно. В плюсах такого подхода несколько бОльшая степень параллелизма, а в минусах больший расход памяти, пропорциональный количеству потоков. RAR же запускает все потоки внутри текущего блока данных. Плюсы и минусы, соответственно, меняются местами. |