Как правило, уровни оптимизации выше -O2
(просто -O3
для gcc, но у других компиляторов выше) включают в себя оптимизации, которые могут увеличить размер вашего кода. Это включает в себя такие вещи, как развертывание цикла, большое количество вставок, заполнение для выравнивания независимо от размера и т. Д. Другие компиляторы предлагают векторизацию и межпроцедурную оптимизацию на уровнях выше -O3
, а также некоторые оптимизации, которые могут значительно улучшить скорость стоимость правильности (например, использование более быстрых, менее точных математических процедур). Проверьте документы, прежде чем использовать эти вещи.
Что касается производительности, это компромисс. В общем, дизайнеры компиляторов пытаются настроить эти вещи так, чтобы они не снижали производительность вашего кода, поэтому -O3
обычно помогает (по крайней мере, по моему опыту), но ваш пробег может отличаться. Это не всегда тот случай, когда действительно агрессивная оптимизация с изменением размера приведет к повышению производительности (например, действительно агрессивное встраивание может привести к загрязнению кэша).