Так я не понял, что требуется доказать?
-O3 - конечно быстрее всех. но не всегда и не во всем.
Зато в попугаях (всмысле в байтах) он значительно длиннее.
Ну начнем с того, что программа явно не оптимальна :)
Понятно, что кеш ускоряет, поэтому кеш мы вырубаем сразу.
я пишу на C++, и у меня осталось примерно следущее:
Код:
#include <stdio.h>
unsigned long CalcFibon (unsigned int index)
{
if (index < 2)
return index;
return CalcFibon (index - 1) + CalcFibon (index - 2);
}
int main()
{
const int NUM_TO_CALC = 40;
for (int i = 0; i < NUM_TO_CALC; i++)
printf ("%3u: %un", i, CalcFibon(i));
return 0;
}
кароче.
gcc -O3 -fomit-frame-pointer: 1.433s 4024b
gcc -O3: 1.563s
gcc -O2 -fomit-frame-pointer: 2.133s 3388b
gcc -Os -fomit-frame-pointer: 2.200s 3356b
gcc -O2: 2.233s
gcc -Os: 2.403s
gcc -O0: 3.826s
gcc -O1: 3.906s
На данном синтетическом примере видно, что -Os практически идентично -O2,
а -O3 сильно раздувает код, и не известно в какую сторону на производительности это скажется. :)
Есть такой проект - acovea долго тока работает сцуко, но там есть всякие интеесные разнообразные тесты.