Importer:Error:WasEmpty



  • Hallo,

    bei der Arbeit mit Zeiger und Array habe die Geschwindigkeit gemessen und festgestellt, dass die Arbeit mit Zeiger genauso schnell bzw. teils ein paar Taktzyklen langsamer/schneller sein kann als die Arbeit mit Indizes. Zusammengefasst ist es so, dass es im Grunde genommen kein Geschwindigkeitsvorteil durch Zeiger zu bekommen ist, wenn dies in Verbindung mit Array-Indizes geschieht (Array war mit 100.000 Elementen).

    Als Algorithmus habe ich den einfachen Bubblesort genommen.

    Egal, ob der Code mit VC++6 aus dem Jahr 2000 oder mit Netbeans 2013 (G++) kompiliert wird, die Ausführungsgeschwindigkeit ist identisch.

    Kann es sein, dass durch Compiler-Optimierungen die Annahme, dass Zeiger schneller seien, nicht bestättigt werden konnte?

    Oder habe ich irgendwo einen Denkfehler?


  • Mod

    Cpp_Anfaeger schrieb:

    Kann es sein, dass durch Compiler-Optimierungen die Annahme, dass Zeiger schneller seien, nicht bestättigt werden konnte?

    Kann sein ja, kann sein nein.

    Oder habe ich irgendwo einen Denkfehler?

    Kann sein ja, kann sein nein.

    Kommt drauf an, was du genau gemacht hast.

    Es ist (minimal) schneller, ein Feld anhand eines Zeiger zu durchlaufen, der immer inkrementiert wird, anstatt einen Index zu inkrementieren und anhand dessen den Zugriff zu berechnen. Das weiß ein Compiler aber auch und kann einfache Iterationsschleifen entsprechend verbessern. Vielleicht ist aber auch der Vorteil so gering, dass er im Rest des Algorithmus untergeht und gar nicht mehr gemessen werden kann.

    Du kannst bei vielen Compilern direkt den erzeugten Assemblercode ansehen und vergleichen, was aus deinen unterschiedlichen Versionen gemacht wurde. Erstaunlich oft stellt man fest, dass nach Optimierung, unterschiedliche Programmversionen zu identischem Maschinencode führen.



  • Achso, danke für den Hinweis. Die Befürchtung hatte ich auch, dass die schlauen Compiler dies optimieren.

    In eingen Büchern steht es immer noch, dass man am Beispiel Array/Zeiger mit einer Schleife die Schnelligkeit von Zeigern demonstrieren könnte. Ich dachte zuerst, dass es irgendetwas mit VC6 nicht stimmt, wenn der Compiler diesen Unterschied relativiert.


Log in to reply