Date: Tue, 19 Nov 2002 21:56:28 +0500
From: Valentin Nechayev <netch@segfault.kiev.ua>
Newsgroups: ftn.ru.unix.prog
Subject: Уровень минимальной оптимизации (-O) в GCC
AC> -O это не минимальный уровень оптимизации.
AC> -O0 - минимальный
Так о том и говорится - что отсутствие -O (то есть -O0 по дефолту) починило.
>> Это да. gcc в этом плане полный урод.
AC> Что имеется ввиду?
С -O0 он ухитряется вываливать в runtime вычисление того, что можно
вычислить запросто на этапе компиляции (!), ухитряется повторять по
нескольку раз идентичные команды, гонять значение по пяти регистрам,
возвращая в исходный (!), и показывать прочие свои потроха. Если же дать
-O, то эти его кишки уже оптимизируются, но сохранять действия в пределах
одной строки он уже не в состоянии. Hормальное промежуточное состояние -
когда бесполезные действия уже убраны и константы вычислены, но оптимизация
между строками еще не запустилась и блочных перестановок еще нет - у него
не предусмотрено. Поэтому - или удобство отладки, но ужасный код,
или нормальный код, но полное неудобство отладки. Коммерческие же компиляторы
в основном, AFAIS, в этом плане построены разумно.