Статическая оптимизация основана на самом коде программы.Альтернативно, динамическая оптимизация основана на результатах выполнения кода.Например, имея длинный оператор switch в C / C ++, можно было бы оптимизировать его, изменив порядок операторов case.Для этого необходимо многократно запускать программу и вести эту статистику оператора коммутатора.
Некоторые современные компиляторы содержат такую платформу оптимизации, которая позволяет запускать программу и сохранять ее статистику времени выполнения.Затем код программы оптимизируется с помощью этой статистики.
См., Например, VC ++ Profile-Guided Optimizations: http://msdn.microsoft.com/en-us/library/e7k32f4k.aspx