Schlüsselwort register



  • Habe gerade gelesen das eine Variable mit dem Zusatz register positiv ist für die Geschwindigkeit. Warum tut man dann nicht einfach vor jede Variable oder sonstiges ein register schreiben??? 😕

    Danke für die Antworten



  • Weil der Satz, den du da gelesen, hast, so nicht stimmt 🙂 Compiler sind heute selbst "schlau" genug, Variablen in Register zu packen.



  • Hoch man das heisst ja soviel wie. s*** schon wieder ein veraltetes tut gelesen.



  • Die meisten Tutorials sind halt Müll, ist einfach so.


  • Mod

    naja, es schadet auch nicht, moderne compiler ignorieren den zusatz einfach. das ist ganz ähnlich wie mit inline, dazu kannst du den compiler auch nicht zwingen.



  • Durch den Speicherbezeichner register wird der Compiler angewießen die Variable in einem Register des CPU abzuspeichern anstatt im normalen RAM, dadurch enstehen Geschwindigkeitsvorteile da die Variable im CPU sofort verfügbar ist wo bei normalen Variablen ein Speicherzugriff erforderlich ist um ihren Wert zu bestimmen oder zu ändern.
    Diese Registerplätze sind jedoch beschränkt und wenn zuviele Variablen mit register deklariert wurden ignoriert der Compiler bei einigen Variablen das register, also macht es keinen Sinn jede Variable mit register zu deklarieren da man nun nicht mehr weis welche den nun im Register liegt und welche nicht!

    Aber wie Bashar schon sagte Regeln die meisten Compiler die Registerbelegung selbst und dadurch verliehrt das Schlüsselwort Register an bedeutung.

    Gruß Wolle.



  • Mal ne Frage dazu rein interessehalber:
    Werden solche Schlüsselwörter, die mittlerweile an Bedeutung verloren haben (also z.B. inline, register) im nächsten Standard rausfliegen, oder bleiben die zwecks Abwärtskompatibilität?



  • Die bleiben drin.

    BTW ich versteh gar nicht, was inline hier zu suchen hat. inline hat eine genau definierte semantische Bedeutung, und kann keineswegs einfach so dazugeschrieben oder weggelassen werden.



  • Cocaine schrieb:

    Mal ne Frage dazu rein interessehalber:
    Werden solche Schlüsselwörter, die mittlerweile an Bedeutung verloren haben (also z.B. inline, register) im nächsten Standard rausfliegen, oder bleiben die zwecks Abwärtskompatibilität?

    Höchstwahrscheinlich fliegen die nie mehr raus. Man kann die aber sinnvoll anders verwenden. Zum Beispiel habe ich einen Vorschlag gesehen, wie man auto verwenden kann, um Typen automatisch zu finden. Beispiel:

    double f();
    
    int main()
    {
       auto val = f();
    }
    

    val würde dann automatisch den Typ double erhalten.


  • Mod

    Bashar schrieb:

    inline hat eine genau definierte semantische Bedeutung, und kann keineswegs einfach so dazugeschrieben oder weggelassen werden.

    bring mal bitte ein beispiel, in dem es nicht weggelassen werden darf...



  • Inline ist dazu da, Funktionsdefinitionen in Headern zu ermöglichen. Wenn du das nämlich ohne inline machst, bekommst du vom Linker eine Mehrfachdefinition angemeckert, sobald dieser Header in mehreren Übersetzungseinheiten vorkommt.



  • bring mal bitte ein beispiel, in dem es nicht weggelassen werden darf...

    // header.h
    #ifndef header_h
    #define header_h
    inline int max(int a, int b)
    {
         return a > b ? a : b;
    }
    #endif
    

    Verwende doch einfach mal die Suchfunktion. Hier wurde schon sehr sehr oft erklärt, wie sich inline auf die ODR-Bedingungen einer Funktion auswirkt.


Anmelden zum Antworten