volatile schlüsselwort



  • Warum ist hier das volatile schlüsselwort so wichtig ?

    volatile short *ttyport;
      short mask1, mask2;
      for ( i = 0; i < n; i++ )
        *ttyport = a[i] & mask1 & mask2;
    


  • Sieht nach einem Optimierungshack aus.
    Der Compiler könnte hier eine Optimierung machen, welche anscheinend nicht gewünscht ist. Warum das genau ist müsstest du den Autoren fragen oder ein wenig mehr Code zeigen.
    Wohin hier die Variable ttyport überhaupt zeigt sieht man ja auch nicht..





  • Hast du denn auch den Rest dieser Seite gelesen? Dort wird doch recht ausführlich erklärt, was volatile bedeutet.



  • da hilft wohl auch nicht wenn ich die Variable const deklariere.
    const verhindert ja nur dass ich in meinem eigenen Programm die Variable nicht verändern kann.



  • blurry333 schrieb:

    da hilft wohl auch nicht wenn ich die Variable const deklariere.
    const verhindert ja nur dass ich in meinem eigenen Programm die Variable nicht verändern kann.

    const hat damit herzlich wenig zu tun.
    const verhindert, daß DU die Variable verändern kannst, volatile sagt dem Compiler, daß die Möglichkeit besteht, daß sich die Variable außerhalb der Kontrolle des Programms verändern kann.

    Bei deinem Beispiel könnte ttyport auf einen Shared-Memory-Bereich verweisen, der von einem externen Gerät verwendet wird. Unter normalen Umständen könnte der Compiler die komplette Schleife wegoptimieren, weil er dort keine bleibenden Nebenwirkungen sieht - und das Ganze ersetzen durch *ttyport=a[n-1]&mask1&mask2; . Durch das volatile teilst du ihm mit, daß die Variable Nebenwirkungen verursachen kann, die irgendwo außerhalb liegen - und damit auch die Zwischenwerte während des Schleifendurchlaufs geschrieben werden müssen.



  • Leute... 🙂

    blurry ist zu 100% beratungsresistent, und zu geschätzten 90% verständnisresistent.


Log in to reply