Overload bei struct ?



  • Hallo an alle,

    ich habe schan nach solchen Themen gegoogelt, bin aber nur beschränkt fündig geworden um meine Frage zu beantworten. In C++ ist es ja bei der Verwendung von Klassen so, dass für deren Verwaltung im kompilierten Programm noch zusätzliche Daten anfallen, die das Programm langsamer laufen lassen. Deshalb habe ich mein Projekt schon komplett von C++ nach C umgeschrieben (ein heiden Aufwand 😃 ). Nun stellt sich für mich die Frage ob für die Verwaltung von Strukturen auch Overload entsteht?

    Hier ein Pseudobeispiel:

    struct Struktur
    {
        double* daten;
        unsigned int N;
        // und weitere Felder
    };
    
    Struktur* Funktion(Struktur* s)
    {
        Struktur* res;
        // Funktion macht ihre Arbeit
        // res wird mit Daten gefüllt
        return res;
    }
    
    void main()
    {
        Struktur* s1 = new Struktur;
        Struktur* s2;
        // s1 mit Daten füllen
        s2 = Funktion(s1);
        // mache irgendwas
        delete s1;
        delete s2;
    }
    

    Da allerdings an dieser Stelle nur die Datenfelder daten und N interessant sind könnte man auch

    struct Struktur
    {
        double* daten;
        unsigned int N;
        // und weitere Felder
    };
    
    double* Funktion(double* d, unsigned int N)
    {
        double* res;
        // Funktion macht ihre Arbeit
        // res wird mit Daten gefüllt
        return res;
    }
    
    void main()
    {
        Struktur* s1 = new Struktur;
        Struktur* s2 = new Struktur;
        // s1 mit Daten füllen
        s2->daten = Funktion(s1->daten, s1->N);
        // mache irgendwas
        delete s1;
        delete s2;
    }
    

    schreiben? Es sieht zwar extrem hässlich aus aber ist die zweite Variante auch schneller bzw. produziert die erste irgendwelchen Overload? 😕

    Vielen dank schonmal im voraus.



  • 0815user schrieb:

    Deshalb habe ich mein Projekt schon komplett von C++ nach C umgeschrieben (ein heiden Aufwand 😃 ).

    jau, alter, alles klar ey. schönen tag noch.



  • Seit wann kennt C das Schluesselwort new? Wahrscheinlich programmierst du auch nur C++ und verwendest struct (das gleiche wie class in C++).

    C++ ist es ja bei der Verwendung von Klassen so, dass für deren Verwaltung im kompilierten Programm noch zusätzliche Daten anfallen, die das Programm langsamer laufen lassen.

    Wenn ja, dann teile deine Weisheit mit uns. Ich habe das noch nicht festgestellt.

    Overload

    Oder doch eher Overhead?



  • 0815user schrieb:

    Frage ob für die Verwaltung von Strukturen auch Overload entsteht?

    ja, füllbytes und so. würd ich gleich von c nach hexadezimal umschreiben.



  • > dass für deren Verwaltung im kompilierten Programm noch zusätzliche Daten anfallen, die das Programm langsamer laufen lassen.

    Was sollen denn das für Daten sein? Ein Objekt mit einem int ist im 32-bit-System 4 Bytes groß. Langsam ist da garnichts. Wenn's dir um Speed geht, solltest du nicht zwischen C und C++ schwanken, sondern Assembler benutzen. C und C++ werden diesbezüglich kaum Unterschiede haben.
    Wenn was "langsam" wäre, dann deine Heap-Structs. Ich sehe keinen Grund für Heap, die Größe ist bekannt und Heap ist langsamer als Stack.



  • Ad aCTa schrieb:

    Heap ist langsamer als Stack.

    wieso?



  • staun0r schrieb:

    Ad aCTa schrieb:

    Heap ist langsamer als Stack.

    wieso?

    Ich vermute mal, das hängt mit der verkorksten x86-Architektur zusammen.
    Der Stack wird direkt über den Stackpointer adressiert, der Heap kann weitere
    Adressberechnngen notwendig machen.

    Ob sich der Aufwand im Endeffekt lohnt ...



  • knivil schrieb:

    C++ ist es ja bei der Verwendung von Klassen so, dass für deren Verwaltung im kompilierten Programm noch zusätzliche Daten anfallen, die das Programm langsamer laufen lassen.

    Wenn ja, dann teile deine Weisheit mit uns. Ich habe das noch nicht festgestellt.

    auf 'nem gigahertz/gigabyte-pc ist das auch kaum feststellbar.

    zum heap: durch die indirekte adressierung isses wohl etwas langsamer. das fällt aber kaum ins gewicht, ausser in extrem zeitktitischem code. in dem fall sollte man die strukt besser global anlegen.
    🙂


Anmelden zum Antworten