Как только я понял, что в GCC есть такая возможность, я спросил у Google, и многие люди хотят знать, как запретить компилятору оптимизировать код. Это кажется контрпродуктивным, для чего это может помочь программисту? Возможно, отладка? Как это поможет в ситуации, когда это предпочтительнее?
Почему вы НЕ хотите, чтобы компилятор оптимизировал ваш код?
Ответы (2)
Основная причина - время компиляции: включение оптимизаций может значительно увеличить время сборки, но без особой пользы.
Кроме того, некоторые оптимизации могут повлиять на точность и правильность вашей программы. Однако эти оптимизации обычно необходимо включать явно, а не с помощью флага типа -O2.
Некоторые оптимизации - например, встраивание - могут увеличить размер исполняемого файла. В некоторых случаях это важное соображение.
Оптимизация также может негативно повлиять на ваш код. Например, скорость может увеличиться, но за счет использования большего объема памяти. Это не всегда желательно.
Вы сказали - отладка. Оптимизатор может реструктурировать код, чтобы функции больше не существовали, а операторы смешивались. Отключение оптимизации часто необходимо, чтобы позволить отладчику сопоставить адреса машинного / байтового кода с исходным местоположением.
Как упоминает Тихон, это также может быть полезно, если в оптимизаторе есть ошибка.