@Bombus

Какие есть методы оптимизации размера программы (исполняемого кода)?

Как узнать какая часть кода вносит в итоговый размер программы больший вклад? Можно ли ставить такой вопрос?
Требуется оптимизировать размер программы для размещения в контроллере (ISP-DAS, процессор 8086). Размер "диска" ограничен. На какие механизмы оптимизации сделать упор (что вносит больший вклад)?
Первое что напрашивается - это комментировать часть кода и смотреть на итоговый размер. Но это можно сделать не всегда, т.к. бывает зависимость одного участка кода от другого. Наверно можно поиграть с опциями компилятора. Вариант, но он, если можно так выразится, интегральный, не позволяет выделить частности с которыми надо поработать.
  • Вопрос задан
  • 3141 просмотр
Решения вопроса 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Начать можно с изучения опций компилятора - там должны быть режимы оптимизации под размер кода, но при этом будет страдать производительность.

Дальше, компоновщик может выдать карту размещения ресурсов, где можно посмотреть размеры каждой процедуры.
Ответ написан
Комментировать
Adamos
@Adamos
Наибольший вклад обычно вносят библиотеки, подключенные статически.
Рассмотреть возможность динамической линковки, если библиотеки есть в системе, либо более легких библиотек, если они необходимы. Ну, и выкинуть то, что не используется.
В самом клиническом случае - брать код из самих библиотек, если они открыты.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
dnovikoff
@dnovikoff
Дополню коллег. Если речь идет про C/C++(судя по тегам так). Смотрите на опции вашего компилятора. Приведу аналогии: компилятор gcc/clang, использует ключ компиляции -Os (s от слова size. То есть оптимизация по размеру). Для студии это будет /O1.

Есть вещи которые сильно "раздувают" код. Например использование шаблонов может сильно увеличить размер вашего бинарника, т.к. каждая инстанциация шаблона - это новый класс.
Ответ написан
@StonedShaman
Шаман
Ко всему выше сказанному, добавлю, что на итоговый размер приложения влияет ещё и сам компилятор. Например откомпилированные в clang программы могут весить меньше, чем откомпилированные в gcc.
Ответ написан
Комментировать
softmart
@softmart
Разработчик
Изначально надо делать так, чтобы код не был сплошным монолитом, а представлял собой модульные участки, которые при необходимости можно отключать ($ifdef).

Это кстати может помочь и в локализации трудноустранимых ошибок, можно отключать отдельные части.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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