reiner C-Code schnellere Ausführung als C++????



  • Daniellus schrieb:

    Am Ende ist es ja eh in Maschinensprache, also ist es vielleicht egal????

    Yep, so ist das. Rein sprachlich gesehen gibt es kein schneller oder langsamer für eines der beiden. Letztendlich sind die Fähigkeiten des Compilers entscheidend. CStoll spricht zwar von "gelegentlich komplexer und damit langsamer", aber das stimmt so kontextfrei nicht. Die Ursachen hier sind vielmehr darin begründet, dass in C++, sprachlich unterstützt, komplexere Sachverhalte möglich sind. Würde man dies mittels C "nachbauen", wäre es letztendlich genauso komplex und langsam. ZB virtuelle Funktionen, die über einen Zeiger, welcher eine Indirektion zur Folge hat, realisiert werden.



  • Also hängt die Geschwindigkeit der Ausführung des Programmes mit allen mathematischen Berechnungen, welche ich programmiert habe, eigentlich nur von der Maschine ab (zu messen in FLOPS) und nicht von der Programmiersprache(außer welche wie Java)????
    Wie lange der Compiler braucht um das Programm zu bauen ist für mich nicht wichtig.



  • in erster linie hängt es davon ab, ob dein code und die algorithmen gut sind.



  • Code und Algorithmen sind optimiert auf wenig Speicherzugriffe und Rechenoperationen.
    Kennt den jemand irgendwelche Funktionen(außer clock()), die Zeit im ms-Bereich messen, ja vielleicht sogar µs-Bereich?



  • Daniellus schrieb:

    Code und Algorithmen sind optimiert auf wenig Speicherzugriffe und Rechenoperationen.
    Kennt den jemand irgendwelche Funktionen(außer clock()), die Zeit im ms-Bereich messen, ja vielleicht sogar µs-Bereich?

    Im C-Standard gibts da nichts. Für das jeweilige Betriebssystem aber bestimmt.



  • GetTickCount();
    misst (unter windows) die zeit seit systemstart in ms

    long time = GetTickCount();
    //rechnen lassen
    time = GetTickCount()-time;
    


  • Extrem genaue Zeitmessung ist nur systemspezifisch möglich. Unter Windows ist QueryPerformanceCounter/QueryPerformanceFrequency afaik das genaueste. Es gibt zwar auch noch die x86 rdtsc Instruktion. Die soll aber, gerade bei Multicore CPUs, Probleme verursachen.



  • groovemaster schrieb:

    Extrem genaue Zeitmessung ist nur systemspezifisch möglich.

    'extrem' genaue zeitmessung ist fast gar nicht möglich, wenn das system sich selber misst 😉



  • Apeman schrieb:

    groovemaster schrieb:

    Extrem genaue Zeitmessung ist nur systemspezifisch möglich.

    'extrem' genaue zeitmessung ist fast gar nicht möglich, wenn das system sich selber misst 😉

    Schon mal was von Prioritätsstufe "Echtzeit" gehört? :p



  • willy schrieb:

    Apeman schrieb:

    groovemaster schrieb:

    Extrem genaue Zeitmessung ist nur systemspezifisch möglich.

    'extrem' genaue zeitmessung ist fast gar nicht möglich, wenn das system sich selber misst 😉

    Schon mal was von Prioritätsstufe "Echtzeit"

    ... oder Hardware Countern gehört? Ausserdem bezog sich das 'extrem' auf die Genauigkeit und nicht auf die Zuverlässigkeit der Messung. Also auch kleinere Einheiten als msecs.



  • willy schrieb:

    Schon mal was von Prioritätsstufe "Echtzeit" gehört? :p

    schon, aber was hat das damit zu tun?

    groovemaster schrieb:

    ... oder Hardware Countern gehört?

    ja, aber am besten, wenn der mit einem externen takt versorgt wird.



  • Wie CStoll schon sagte, hängt das primär vom Compiler und der Standardbibliothek die Du einsetzt ab. Allerdings gibt es einige Gründe, warum C-Programe schneller sein können:

    * C-Programme verbrauchen meistens weniger Speicher (Speicherzugriffe sind in der heutigen Zeit relativ teuer)
    * Kleinere Programme "passen" besser in den Cache Deiner CPU
    * In C nutzt man Abstraktion nur wenn man sie wirklich braucht
    * C ist letztenendes nur ein Makroassembler
    * Es ist einfacher performanten C Code zu schreiben, als äquivalenten C++ Code



  • /. schrieb:

    * C-Programme verbrauchen meistens weniger Speicher (Speicherzugriffe sind in der heutigen Zeit relativ teuer)

    Ich vermute mal, du sprichst hier zB von Streams wie cout und dergleichen. Das hat aber mit der Sprache selbst nichts zu tun, sondern sind lediglich Implementationen. Kein Grund, warum C++ Programme nicht genauso schlank sein sollen.

    /. schrieb:

    * Kleinere Programme "passen" besser in den Cache Deiner CPU

    Ja. Ist aber halt kein Argument. Siehe oben.

    /. schrieb:

    * In C nutzt man Abstraktion nur wenn man sie wirklich braucht

    Abstraktion nutzt man immer, sofern es sinnvoll ist. Vollkommen unabhängig von C und C++. Und nur weil man dieses oder jenes in Klassen packt, ist es noch lange nicht weniger performant. Als ob in C++ keine Strukturen oder Funktionen genutzt werden würden. 🙄

    /. schrieb:

    * C ist letztenendes nur ein Makroassembler

    Mag sein, hat aber mit dem Thema nichts zu tun. Wenn du in C++ OO weglässt, ist es letztendlich auch nicht viel mehr.

    /. schrieb:

    * Es ist einfacher performanten C Code zu schreiben, als äquivalenten C++ Code

    Stimmt. Und nachts ist es auch kälter als draussen...


Anmelden zum Antworten