Если работоспособность некоторой программы
ограничена ее размером, а не скоростью реализации,
то следует применить стратегию оптимизации. При этом работать следует над ухищрениями, в точности
противоположными тем, что применялись для увеличения быстродействия. Необходимо тщательно изучить
свою программу и определить, что является причиной
основной проблемы — размер кода или объем данных.
Если производится работа с большими блоками
данных, то необходимый эффект может дать их организация в нетривиальные структуры. Однако замена быстрообрабатываемых, но неплотных массивов и таблиц
менее громоздкими структурами типа связных списков
или упаковка данных с применением битовых полей,
вероятно, даст не очень большие преимущества.
Обычное уплотнение таблиц и других структур данных
и их дальнейшее разуплотнение не всегда полезно из-за того, что часто необходимо разуплотнять все данные только для того, чтобы добраться до некоторого
пункта, а программы уплотнения-разуплотнения сами
по себе чаще всего занимают большой объем памяти.
Оптимизация программы для уменьшения размера
не похожа на оптимизацию для повышения быстродействия.
Во-первых, следует просмотреть весь текст программы и убрать все предложения и процедуры, которые никогда не осуществляются или недоступны ни из
какой точки программы (мертвые коды). Если речь
идет о большой прикладной программе, много строк
можно безболезненно удалить.
Во-вторых, проанализируйте программу.
Необходимо опять собрать все идентичные или
функционально сходные последовательности кода в
подпрограммы, выбираемые из любой точки программы. Чем более универсальными будут написанные
подпрограммы, тем более вероятно, что их код можно
применять повторно. Если последовательно придерживаться данного подхода где только возможно, то по-
лучится очень компактная программа модульного типа, которая состоит главным образом из вызовов
подпрограмм.