вынуждает копировать постоянные адреса памяти
вынуждает копировать постоянные адреса памяти в регистры перед выполением арифметических операций над ними. В результате может создаваться более хороший код, так же как и при -fforce-mem.
-fomit-frame-pointerНе сохранять указатель на кадр (frame pointer) в регистре для функций, которые не нуждаются в этом. Это позволяет избежать инструкций на сохранение, определение и восстановление указателя на кадр (frame pointer); в то же время освобождая регистры для других функций. Это делает невозможным отладку на большинстве машин.
Замечание. Все возможности оптимизации, которые описаны в этой книге относятся к семейству процессоров Pentium II/III. Так, что вы должны при необходимости изменить флаги компиляции под ваш тип процессора.
Результаты тестирования быстродействия, суммирование по архитектурам.
В зависимости от типа вашего процессора и версии компилятора (gcc/egcs) опции оптимизации могут отличаться. Графики приведенные ниже помогут вам выбрать лучшие для вас флаги компиляции.
Версия компилятора установленного в Red Hat 6.1 и 6.2 - egcs 2.91.66. Но перед выбором опций оптимизации обязательно проверьте его версию, используя команду:
egcs –version
Все результаты тестирования могут быть получены с домашней страницы GCC, находящейся по адресу .
Сейчас приведем пример:
Для CPU Pentium II/III (i686) и компилятора egcs-2.91.66 лучшими опциями оптимизации будут:
CFLAGS=’-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions’
Для CPU pentium (i586) с компилятором egcs-2.91.66 лучшими опциями оптимизации будут:
CFLAGS=’-O3 -march=pentium -mcpu=pentium -ffast-math -funroll-loops -fomit-frame-pointer -fforce-mem -fforce-addr -malign-double -fno-exceptions’
Для CPU i486 с компилятором egcs-2.91.66 лучшими опциями оптимизации будут:
CFLAGS=’-O3 -funroll-all-loops -malign-double -mcpu=i486 -march=i486 -fomit-frame-pointer -fno-exceptions’
Содержание Назад Вперед