Какие есть методы оптимизации размера программы (исполняемого кода)?
Начать можно с изучения опций компилятора - там должны быть режимы оптимизации под размер кода, но при этом будет страдать производительность.
Дальше, компоновщик может выдать карту размещения ресурсов, где можно посмотреть размеры каждой процедуры.
Ко всему выше сказанному, добавлю, что на итоговый размер приложения влияет ещё и сам компилятор. Например откомпилированные в clang программы могут весить меньше, чем откомпилированные в gcc.