Variablen auf dem Register



  • Meines wissens kann die CPU sehr schnell auf den Registerspeicher zugreifen.
    Jedoch wann weiß ich wenn ich eine Registervariable benötige.

    Gibt es Richtlinien?
    Oder kann ich das erst nach dem Testen sagen?

    Und wieviele Register Variablen darf man ohne verschwenderisch zu sein in Relation zu lokalen Variablen verwenden. Der Registerspeicher ist ja um eines kleiner als der herkömmliche Speicher.

    Jo, das Fragen hat kein Ende! 😃 Aber Programmieren ist einfach interessant.

    Mr.Schottky 😉



  • Es gibt zwar das Keyword register um eine Variable in ein Register zu packen. Moderne Compiler ignorieren dass aber, weil sie das viel besser können als du.

    Beispiel:

    for(register int i=0; i<4; ++i)
    {
      foo(i);
    }
    

    könnte ein Compiler ohne Probleme zu

    foo(0);
    foo(1);
    foo(2);
    foo(3);
    

    machen. Er hat i also komplett wegoptimiert.
    Nun würde ja ein Register unbenutzt bleiben - weil du deinen Code darauf ausgelegt hast, dass i dieses eine Register braucht.

    Deswegen denkt sich der Compiler: ich weiss das besser als du, und packt die Variablen so in die Register wie er es gerne hätte (was wesentlich besser ist, als du es je könntest (zumindest in 99% der Fälle)).



  • Danke! Dann habe ich eine Sorge weniger. 🙂

    mfg Mr.Schottky



  • Mr.Schottky schrieb:

    Und wieviele Register Variablen darf man ohne verschwenderisch zu sein in Relation zu lokalen Variablen verwenden. Der Registerspeicher ist ja um eines kleiner als der herkömmliche Speicher.

    So viele Register gibt es gar nicht, früher gab es ein A, B, C, D, H und L Register.

    Wieviele das heute sind weiß ich nicht 🙂



  • mich würd mal interessieren, welche oder ob überhaupt compiler die MMX und die 3DNow register zum optimieren nutzen 😕



  • Weder noch, aber neue Compiler verwenden SSE2.



  • warum eigentlich nicht?
    die technik ist so neu nicht



  • @Delryn
    Das ist Architekturabhängig. x86er PCs haben extrem wenige allgemeine Register (Die Grundprinzipien sind eben 20 Jahre alt). Aber normale und moderne RISC Architekturen haben idr. 32 allgemeine Register.

    @DEvent
    Register? Die Register sind ja die Floating-Point Register. Interessanter ist hier die Frage, wer die entsprechenden Operationen nutzt 🙂



  • DEvent schrieb:

    warum eigentlich nicht?
    die technik ist so neu nicht

    Ich denke schon, dass es Compiler gibt, die MMX nutzen können.

    Das Problem ist aber oft, dass man erstmal parallelisierbare Anweisungen finden muss, die man gut via SIMD verarbeiten kann. Dann muss man noch Alignmend und Indirektionen beachten etc. Das ist bei C und C++ gar nicht so leicht, so fügt zB der Intel Compiler oft Laufzeitprüfungen bei um dann je nachdem die SIMD Optimierungen zu nutzen oder nicht.


Anmelden zum Antworten