register?



  • Hi,

    lohnt sich die Benutzung des Schlüsselwortes register eigentlich noch?



  • nein



  • wieso? [begründung]



  • Moderne Compiler ignorieren das Schlüsselwort register, weil sie das viel besser können als du.



  • Ich glaube sowieso man sollte alle Schlüsselwörter die die Performance erhöhen könnten weglassen und nur die benutzen die den Unterschied zwischen kompelierbar und nicht kompelierbar machen.

    Bei modernen PC kommt es sowieso nicht so sehr auf die Performance an, die PCs sind heute so schnell das sich viele Regeln gar nicht mehr wirklich auszahlen. (Bsp: globale Variabeln -> Lösung mit Zeiger) die Unterschiede liegen im Bereich der Fehlertoleranz jeder Messung.



  • flammenvogel schrieb:

    Ich glaube sowieso man sollte alle Schlüsselwörter die die Performance erhöhen könnten weglassen und nur die benutzen die den Unterschied zwischen kompelierbar und nicht kompelierbar machen.

    restrict ist aber ganz nice 😉

    Was globale Variablen mit Zeigern zutun haben, ist mir auch ein Rätsel...



  • Kann ich dir sagen:

    Erstmal warum das ein bisschen zum Thema gehört, IMHO kann der Kompiler globale Variabeln im gegensatz zu normalen nicht in die Prozessregister eintragen.

    ---> Müsste die Lösung mit Zeigern schneller sein. (Ich benutze globale Variabeln nur wenn Funktionsaufrufe mit call-by-value unmöglich sind, dann bleibt nur noch Call-by-reference, das bedeutet den Einsatz von Zeigern)



  • flammenvogel schrieb:

    Erstmal warum das ein bisschen zum Thema gehört, IMHO kann der Kompiler globale Variabeln im gegensatz zu normalen nicht in die Prozessregister eintragen.

    Natürlich muss er sie erst reinladen, aber das muss er sowieso bei jeder Variablen tun, die wachsen ja schließlich nicht in den Registern.

    Müsste die Lösung mit Zeigern schneller sein.

    Was natürlich ein Blödsinn ist, weil man hier immer indirekten Zugriff hat, wenn man Pech hat, hat man schlechte Datenlokalität und das kostet dann.

    Aber der Compiler ist ja nicht dumm. der holt sich dann den Wert der Variable und packt sie in ein Register (sofern eins vorhanden ist) oder auf den Stack anstatt 1mio mal den Zeiger zu dereferenzieren und schreibt man ende den Wert in den Speicher.

    Sofern das alles natürlich möglich und sinnvoll ist. Der Compiler kann das super alleine entscheiden. Was ich gesagt habe, kann er machen, wenn er denkt, dass es gut wäre - muss aber nicht.

    (Ich benutze globale Variabeln nur wenn Funktionsaufrufe mit call-by-value unmöglich sind, dann bleibt nur noch Call-by-reference, das bedeutet den Einsatz von Zeigern)

    Muss ich das verstehen?
    ich verwende nie globale Variablen, dh fast nie. manchmal sind sie doch nötig 😞 aber nur sehr selten.

    aber call by reference und Zeiger verwende ich schon oft. Sonst wäre es ja nicht c++...



  • Ich habe das so in irgendeinem Tutorial sinngemäß mal gelesen. Frag mich aber bitte nicht wo, ich kenne mich zugegeben nicht sogut mit Prozessorarbeitsweisen aus. Aber nochmal zu den globalen Variabeln natürlich beutze ich nicht nur globale Variabeln, allerdings bemühe ich mich nicht wenn eine Lösung mit Zeigern schwierger ist als mit globalen Variabeln, die mit Zeigern zu benutzen. Warum auch??? Was hat das mit damit zu tun ob das noch C++ ist oder nicht. Alles was ein C++ Kompiler kompilen kann ist (mal von einigen Ausnahmefällen abgesehen) C++.



  • flammenvogel schrieb:

    Ich habe das so in irgendeinem Tutorial sinngemäß mal gelesen.

    Ja, gibt viele miese Tutorials und texte im inet 😞

    allerdings bemühe ich mich nicht wenn eine Lösung mit Zeigern schwierger ist als mit globalen Variabeln, die mit Zeigern zu benutzen.

    Mir ist das zwar nicht ganz klar, in welcher situation man zeiger durch globale variablen ersetzen kann, aber der ansatz klingt irgendwie falsch.

    Was hat das mit damit zu tun ob das noch C++ ist oder nicht. Alles was ein C++ Kompiler kompilen kann ist (mal von einigen Ausnahmefällen abgesehen) C++.

    C++ ist etwas anders als dass was der Compiler zulässt.
    Man kann auch C mit C++ programmieren, oder Java, Fortran, etc.
    Nur ist es dann eben nicht C++.



  • Shade Of Mine schrieb:

    restrict ist aber ganz nice 😉

    wassn restrict? kennt mein compiler net?



  • meiner auch nicht



  • wassn nu restrict?



  • restrict keyword
    
    C99 supports the restrict keyword, which allows for certain optimizations involving pointers. For example:
    
        void copy(int *restrict d, const int *restrict s, int n)
        {
            while (n-- > 0)
                *d++ = *s++;
        } 
    
    C++ does not recognize this keyword.
    
    A simple work-around for code that is meant to be compiled as either C or C++ is to use a macro for the restrict keyword:
    
        #ifdef __cplusplus
         #define restrict    /* nothing */
        #endif 
    
    (This feature is likely to be provided as an extension by many C++ compilers. If it is, it is also likely to be allowed as a reference modifier as well as a pointer modifier.)
    
    [C99: §6.2.5, 6.4.1, 6.7.3, 6.7.3.1, 7, A.1.2, J.2]
    [C++98: §2.11]
    

Log in to reply