starix

Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору AkulaBig Обясняю популярно! (но для начала неплохо бы было представлять формат PE-Exe, но вобщем это не особенно важно!) 1) Например файл весил до сжатия 7 метров! Из-за разницы выравнивания секций на диске и в памяти, ну плюс еще неинициализированные секции (это все ко внутреннему устройству EXE-файлов) допустим, что в памяти он у нас должен занимать 10 метров. 2) Далее сжимаем файл UPX'ом. Файл на диске начинает занимать 4 метра (Отлично! Экономим целых 3 мегабайта), но в памяти он будеи занимать уже не 10 (!!!), а в районе 14 метров!!! Почему так? Лего! UPX создает первую неинициализированную секцию, которая на диске занимает НОЛЬ байт, а в памяти равную образу (!) оригинального файла, тоесть 10 метрам! Это раз. Далее в файле содержится секция со сжатыми данными, их размер и на диске и в памяти одинаков и равняется 4 метрам! Плюс тут же находятся некоторые несжатые ресурсы (иконки, VersionInfo и т.д.), таблица импорта и небольшой стаб (код), который все это дело распаковывает! Но это как правило пару килобайт... 3) Итого простая арифметика. До запаковки файл занимает: на диске 7 Мб, в памяти 10 Мб. После запаковки: на диске 0 (первая пустая секция) + 4 (запакованые данные) + ~0 (ну в сравнении с мегабайтами - пару килобайт нечтожны) = ~4 метра, а вот в памяти уже 10 (первая секция, в которую распаковывается оригинальная прога) + 4 ( теже запакованые данные) + ~0 (опять теже пару килобайт) = ~14 метра. В итоге имеем выйгрыш в размере на диске 3 Мб, и потерю в памяти в 4 Мб. Что важнее - решать только ВАМ! З.Ы. А как же машины с 64 метрами оперативы? З.Ы.Ы. Осознавая естественный вопрос, сразу отвечу. Те единожды используемые для распаковки сжатые 4 Мб, после распаковки выкинуть из памяти НЕЛЬЗЯ. Уж извените таково устройство Windows и загруженные секции из памяти не выгружаются, есть исключения, но они тут не уместны, да и это уже тема для отдельного разговора... | Всего записей: 697 | Зарегистр. 14-04-2003 | Отправлено: 15:22 03-10-2006 | Исправлено: starix, 15:31 03-10-2006 |
|