Почему вы НЕ хотите, чтобы компилятор оптимизировал ваш код?

Как только я понял, что в GCC есть такая возможность, я спросил у Google, и многие люди хотят знать, как запретить компилятору оптимизировать код. Это кажется контрпродуктивным, для чего это может помочь программисту? Возможно, отладка? Как это поможет в ситуации, когда это предпочтительнее?


person Leonardo    schedule 26.01.2013    source источник


Ответы (2)


Основная причина - время компиляции: включение оптимизаций может значительно увеличить время сборки, но без особой пользы.

Кроме того, некоторые оптимизации могут повлиять на точность и правильность вашей программы. Однако эти оптимизации обычно необходимо включать явно, а не с помощью флага типа -O2.

Некоторые оптимизации - например, встраивание - могут увеличить размер исполняемого файла. В некоторых случаях это важное соображение.

Оптимизация также может негативно повлиять на ваш код. Например, скорость может увеличиться, но за счет использования большего объема памяти. Это не всегда желательно.

person Tikhon Jelvis    schedule 26.01.2013
comment
Кроме того, что следует оптимизировать по размеру или скорости? На ПК ответ почти всегда - скорость, но есть аргументы в пользу размера встроенных систем с ограниченным ПЗУ / флэш-памятью. - person Gabe Sechan; 26.01.2013
comment
@GabeSechan: Я только что редактировал это, пока вы комментировали. Это важный момент. - person Tikhon Jelvis; 26.01.2013
comment
Спасибо, это помогает понять, каким может быть кодирование, когда я выхожу за рамки написания 100-строчных программ. - person Leonardo; 26.01.2013

Вы сказали - отладка. Оптимизатор может реструктурировать код, чтобы функции больше не существовали, а операторы смешивались. Отключение оптимизации часто необходимо, чтобы позволить отладчику сопоставить адреса машинного / байтового кода с исходным местоположением.

Как упоминает Тихон, это также может быть полезно, если в оптимизаторе есть ошибка.

person DrC    schedule 26.01.2013