Освобождение статической памяти?нет, это не может быть правильно - PullRequest
7 голосов
/ 31 августа 2010

Я играл с встраиванием ресурсов в мою программу на С ++.Для этого я зашифровываю данные в простой массив, то есть

unsigned char image_png[] ={
    0x0a, 0x0b, 0x0c, 0x0d, ...
};

Некоторые из этих ресурсов не используются после загрузки (т.е. они преобразуются во что-то другое, а затем исходные данные просто становятся массивными.... хотя небольшая часть для простоты распространения может стоить).

Мне любопытно, есть ли способ встроить ресурс в программу, чтобы мне не пришлось беспокоиться о том, что двоичный файл сможет найти все его наиболее важные ресурсы, но затем освободить его послеон используется для того, чтобы занимаемая память занимала меньше места.

Возможно ли это?Если это возможно, глупо ли пытаться это сделать?Например, возможно, ОС все равно сохранит весь образ программы в памяти (я не уверен, как именно это работает).

edit: чтобы отвечать на комментарии, я работаю над Linux (Ubuntu 10.04), но если есть кроссплатформенные решения, я бы хотел их услышать

Ответы [ 2 ]

4 голосов
/ 31 августа 2010

Как говорит Tomaka17, вам не нужно об этом беспокоиться - если вы никогда не коснетесь этого ресурса, он никогда не будет поврежден и не будет использовать физическую память.Когда вы загружаете DLL / так / что угодно, она действительно только отображает файл в память;попытка получить доступ к этому файлу приводит к тому, что файл читается по частям.

0 голосов
/ 31 августа 2010

Один из способов, которыми я видел использование в нескольких приложениях, - это конкатенация данных в конце исполняемого файла с последующим добавлением размера самих данных.

Затем вы можете открыть исполняемый файл, перейти к концу потока и прочитать размер данных, затем вернуться к этому размеру и прочитать ресурсы.

Обратите внимание, что ресурсы будут точно такими, как вы их разместили, поэтому организация может быть в опасности.

Я также не могу сказать, является ли это наилучшей практикой, но, похоже, она работает.

...