Fibonacci-Zahlen sind mit Abstand das schlechteste Beispiel für Rekursion. Die iterative Lösung ist genauso trivial und hat lineare Komplexität, anstatt exponenzielle.
Die Zeitmessungsmethoden, die C++ zur Verfügung stellt sind eher bescheiden. Wenn, dann bietet sich clock() an. time() ist je nach benötigter Genauigkeit ziemlich bescheiden. GetTickCount ist aber ähnlich ungeeignet, da der Zähler nicht wirklich gleichmäßig läuft und nur im 55ms Takt arbeitet.
Für verlässliche Performancemessung bietet sich tatsächlich die entsprechende API der Betriebssystems an. Unter Windows ist das QueryPerformanceCounter und QueryPerformanceFrequency. Die Funktionen arbeiten auch beim Einsatz mehrerer Prozessoren (mit Hyperthreading hat man zwei logische Prozessoren) korrekt.
"Timer" ist übrigens die falsche Bezeichnung für die gesuchte Lösung. Darunter vesteht man überlicher Weise etwas, was nach einer definierten Zeit ein Ereignis auslöst.
Die Variante mit dem atexit ist auch nicht so gut, da man hier unter Umständen den Deinitialisierungsaufwand der C-Laufzeit-Umgebung mitmisst. Okay, es aber kommt immer auf die benötigte Genauigkeit an. Am besten lässt man die zu messende Funktion eh nicht nur einmal laufen, sondern gleich 100, 1000, 10000 mal oder sonstwie oft laufen.
Wie schnell sie tatsächlich ist, findet man damit nicht wirklich raus. Einmal hängt das vom Algorithmus ab, dann von der Ausprogrammierung, dann vom Compiler und dann noch vom Prozessor. Aussagekräftig sind die Zahlen, die man erhält also nicht wirklich. Benutz lieber einen Profiler und schau drauf, wo die Zeit im Algorithmus bleibt.
Das C++ Programme natürlich langsamer als reiner Assemblercode sind, halte ich mal für ein ganz gewaltiges Gerücht.