register?



  • Hi,

    hab ne frage: was Bedeutet register? ich habs in dem code gefunden, weis aber net was das ist und wofür es da ist?

    register unsigned int u=0;
         for(register char j=0; j<8; j++)
          u=(u<<1 | (s[j]=='0' ? 0 : 1));
    


  • Hallo,

    das ist eine bitte an den Compiler, diese Variable so schnell wie moeglich
    in die CPU Register zu laden und nicht auf den Stack zu legen.

    Bei heutigen Compilern, kannst du dir das spezifizieren von register-Variablen
    allerdings sparen, da der Compiler besser optimieren kann als ein
    Programmierer.

    Wie gesagt, es ist auch lediglich eine bitte an den Compiler, er muss es
    nicht tun.

    mfg
    v R



  • Tja, wir sind tatsächlich schon so weit, dass wir Maschinen um einen Gefallen bitten müssen 😃



  • Wenn die Compiler schlauer sind als wir, dann sollten wir nicht bitten, sondern nur dankbar sein. 😃 😃



  • mit inline verhält es sich ja genauso: der Compiler entscheidet. Das ist durchaus sinnvoll: z.B. bei einer rekursiven Funktion.



  • c++eus schrieb:

    mit inline verhält es sich ja genauso: der Compiler entscheidet. Das ist durchaus sinnvoll: z.B. bei einer rekursiven Funktion.

    Nein, inline hat auch eine andere Bedeutung. Nämlich dass eine inline Funktion in einem Header definiert werden darf.



  • Ja,

    aber inline hat eigentlich die Bedeutung, dass bei einer kleinen Funktion (z.B. bei get-set-Methoden) der Quellcode ersetzt wird, und so der Funktionsheader wegfällt. (In c wurde dies zumeist mit #define gelöst, was aber unsauber ist.)



  • Beim VC++ kann man allerdings das inlinen mit __forceinline erzwingen. Geht bei rekursiven Funktionen natürlich trotzdem nicht.



  • aber das ist kein iso C++.



  • Optimizer schrieb:

    Beim VC++ kann man allerdings das inlinen mit __forceinline erzwingen.

    Nein, kann man auch nicht.
    Du kannst ihm nur sagen: 'Inline nur Funktionen die __forceinline sind', aber nicht 'Inline alle Funktionen die __forceinline sind'.



  • Das stimmt so nicht. inline gibt dem Compiler den Hinweis, dass er doch bitte nachprüfen möchte, ob es sich lohnen könnte, die Funktion zu inlinen.
    Bei __forceinline findet diese Prüfung nicht statt.
    Quelle

    Dass das kein ISO C++ ist, stört mich eigentlich relativ wenig, weil ich die Erweiterungen von M$ sehr sinnvoll finde (auch wenn ich jetzt nicht speziell __forceinline nutze).



  • @Optimizer:
    Ja, die Kosten/Nutzen Analyse faellt flach, aber es gibt Funktionen die trotzdem nicht geinlinet werden koennen.



  • Jo, hab ich ja gesagt. 🙂
    Betrifft z.B. rekursive Funktionen.



  • Ich sehe den Sinn von __forceinline nicht wirklich. Im Endeffekt wird der Compiler schon testen, ob man die Funktion inlinen kann oder nicht und das ist wahrscheinlich optimaler, als in den Optimierungsprozess einzugreifen.



  • kingruedi schrieb:

    Ich sehe den Sinn von __forceinline nicht wirklich.

    ich auch nicht

    Habs noch nie verwendet - denn inlinen kann der Compiler sowieso besser als ich.


Log in to reply