Я сгенерировал код C ++, который содержит ~ 200 тыс. Строк кода, и я пытаюсь скомпилировать его под CentOS 5.11 с gcc 4.8.5. Когда я указал флаг -O1, компиляция заняла 1 минуту 33 секунды. Я нашел все флаги оптимизации из этого и это страницы, которые включает -O1, и вот они:
- -fcombine-stack-Adjustments
- -fcompare-elim
- -fcprop-registers
- -fdefer-pop
- -всегда-распространять
- -fguess-ветвь-вероятность
- -fif-преобразование
- -fif-conversion2
- -finline-функции-вызываемые-один раз
- -fipa-профиль
- -fipa-pure-const
- -fipa-ссылка
- -fmerge-константы
- -fshrink-wrap
- -fsplit-широкие-типы
- -ftree-bit-ccp
- -ftree-ccp
- -футри-ч
- -ftree-copy-prop
- -ftree-copyrename
- -ftree-dce
- -ftree-dominator-opts
- -ftree-dse
- -free-fre
- -дерево-раковина
- -ftree-slsr
- -ftree-sra
- -дерево-тер
Но когда я заменил -O1 на эти флаги, время компиляции уменьшилось до 34 секунд. То же самое с -O2 и -O3.
Итак, вот вопрос: что именно делает флаг -O? Если ничего больше, чем добавление других флагов, то время компиляции не должно измениться, но в моем случае разница огромная.