Performanceunterschiede zwischen Code in .h und .cpp? (war: theoretische frage)



  • Also,...

    Gibt es Geschwindigkeitsunterschiede (beim Ausführen einer Funktion) wenn ich diese in den Header schreib oder als 'normalen' code schreib?

    Bzw. Wird das Programm ab einer gewissen Header-Länge merklich langsamer?

    Dies sind zwar nur theoretische Fragen, und Geschwindigkeitsunterschiede (falls gegeben) sind sicherlich verdammt klein, mich würde es aber einfach algemein interresieren.

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!
    Ausserdem verschoben nach "Rund um".



  • Der Compiler erzeugt auf .CPP und .H File ein fertiges Programm, also spielt es keine Rolle, wo der Source sich so herumtreibt...



  • Funktionen in einer .h können theoretisch immer, Funktionen in einer .cpp nie (außer innerhalb dieser .cpp) geinlinet werden. Deshalb ist Code in einer .h potenziell schneller (kompiliert dann aber auch langsamer).

    ...ich hoffe, das stimmt so - ich hab noch nicht gefrühstückt 😕



  • Der Code in einer Quelltextdatei kann auch inlined werden, wenn der Compiler export oder globale Optimierung (d.h. zwischen Objektdateien) unterstützt.



  • @operator void:
    Wie sollen da Unterschiede zustandekommen?

    Die Header-Datei wird doch im Prinzip direkt in die .cpp Datei reinkopiert.

    z.B.

    test.cpp

    int test()
    #include "test.h"
    

    test.h

    {
    	return 0;
    }
    


  • // es geht hier um ein Prinzip, nicht um Stil
    // a.h
    inline int foo_h() { return 0; }
    
    int foo();
    
    // a.cpp
    #include "a.h"
    
    int foo()
    {
        return 0;
    }
    
    void a_bar()
    {
        if (foo())
            cout << "hierfür wird von einem guten Compiler kein Code generiert";
        if (foo_h())
            cout << "hierfür auch nicht";
    }
    
    // b.cpp
    #include "a.h"
    
    void b_bar()
    {
        if (foo())
            cout << "kann nur schwer wegoptimiert werden (globale Optimierung)";
        if (foo_h())
            cout << "dies dagegen schon";
    }
    

Anmelden zum Antworten