horror_x
@horror_x

С какой стороны подойти к хранению тяжеловесных ресурсов в исполняемом файле?

Возникла необходимость хранить ресурсы большого объёма в единых исполняемых файлах. В частности, используется MSVC в связке с Qt. Стандартные схемы ресурсов Qt и Win API не подходят, поскольку категорически нежелательно загружать ресурсы в память — в идеале их нужно по частям читать из исполняемого файла.


В качестве примера можно привести самораспаковывающиеся архивы, которые создают 7-zip и WinRar. Хотелось бы достичь такого же эффекта на этапе сборки, не прибегая к пост-обработке исполняемых файлов и парсингу их структуры при исполнении.
  • Вопрос задан
  • 2922 просмотра
Решения вопроса 1
horror_x
@horror_x Автор вопроса
Отличное решение предложил amirul:
Я крайне не люблю исполняемые файлы размером в десятки мегабайт, но раз уж Вы уже все равно решили их использовать и единственное решение, которое осталось принять — это, собственно, как, то используйте ресурсы и не морочьте голову. Винда как раз таки и использует меппинг для загрузки исполняемых файлов с деманд-пейджингом страниц в момент доступа.
Т.е. стандартная схема Windows всё-таки подходит для этих целей.

Ещё одно подходящее решение подсказали leotsarev и 1099511627776 — дописывать данные в конец исполняемого файла, а дальше уж способы манипуляции с ними зависят только от воображения.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@1099511627776
Пишу все что интересно и на всем на чем интересно
Хорошо, а вы пробовали по принципу RARJPEG — склеить ресурсы с исполняемым файлом.
А потом уже в процессе загрузки по меткам в файле находить реурсы и работать с ними
Ответ написан
В качестве примера можно привести самораспаковывающиеся архивы, которые создают 7-zip и WinRar.
Они работают так: в конце PE файла, после всего, в конце дописывается собственно архив. Программа открывает собственный EXE на чтение и ищет заголовок архива, не заморачиваясь на разбор собственно PE-файла.
Ответ написан
@1099511627776
Пишу все что интересно и на всем на чем интересно
Вам хорошо бы найти к примеру как WoW работает со своими ресурсами, там ресурсов ого-го Гигабайт, и он из точно все в памяти не держит.
Как варианты:
— сделать свой архивный формат,
— пихать в БЛОБ-ы какой-то БД и потом читать их оттуда
— сделать zip — с коеф. сжатия 0 чтоб быстрее распаковывался и подгружался в память
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы