Как лучше всего уменьшить размер DLL?

я использую LoadLibraryAчтобы загрузить мою DLL в мой проект. Я только начал замечать, что их размеры начинают увеличиваться по мере того, как я продолжаю добавлять новые функции и т. Д. Есть ли в настройках моего проекта какие-либо параметры, которые могут помочь уменьшить размер моей библиотеки DLL?

2 ответа

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

Это отличается от поведения статической библиотеки, которая сначала включает в себя все, но где компоновщик откладывается до использования библиотеки, поэтому вы никогда не получите мертвый код, недоступный в связанном выводе.

LTGC + разделы функционального уровня + все встроенное + сворачивание кода + сворачивание строк + /O2вероятно, сильно сократит размер файла - хотя и за счет любой возможности правильной отладки. (При агрессивном встраивании и сворачивании избыточного материала стеки вызовов перестают правильно разрешаться.)

Забудьте о том, о чем вы, возможно, читали /O1будучи меньше. Это только на начальном этапе (предварительное связывание), поскольку оно в основном предотвращает встраивание и развертывание цикла, но с развитием технологий компиляторов в настоящее время это препятствие для исчерпывающей оценки константного выражения во время компиляции, которая часто экономит не только вычислительные затраты во время выполнения (и мы часто говорят в 2-10 раз!), но также достаточно часто компилируются в нечто более компактное.

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

Но если у вас много ресурсов в EXE / DLL, вы не увидите большой разницы. Если в этом случае вам действительно нужен небольшой размер, я предлагаю вам использовать полиэтиленовый упаковщик. Очень хороший бесплатный полиэтиленовый упаковщик UPX.

UPX - это усовершенствованный компрессор исполняемых файлов. UPX обычно уменьшает размер файлов программ и библиотек DLL примерно на 50%-70%, тем самым уменьшая дисковое пространство, время загрузки сети, время загрузки и другие расходы на распространение и хранение.

Вам нужно запустить upx как процесс пост-сборки, чтобы упаковать файл EXE / DLL с помощью такой команды:

      upx --best mydll.dll

PE-упаковщики сжимают ваш код и ресурсы и инкапсулируют их в другой EXE / DLL файл. Затем эти файлы будут автоматически распакованы во время выполнения, поэтому вы можете использовать их как обычный EXE / DLL-файл. Хотя PE-упаковщики тоже сжимают коды, они очень эффективны, когда у вас много ресурсов в EXE / DLL.

Другие вопросы по тегам