Freigeben über


flüchtig (C++)

Ein Typqualifizierer, den Sie verwenden können, um zu deklarieren, dass ein Objekt im Programm von der Hardware geändert werden kann.

volatile declarator ;

Hinweise

Sie können den /volatile Compilerschalter verwenden, um festzulegen, wie der Compiler dieses Schlüsselwort interpretiert.

Visual Studio interpretiert das Schlüsselwort volatile unterschiedlich je nach Zielarchitektur.Für ARM wenn keine /volatile-Compileroption angegeben wird, führt der Compiler aus, als ob /volatile:iso angegeben wurden.Für Architekturen anders ARM, wenn keine /volatile-Compileroption angegeben wird, führt der Compiler aus, als ob /volatile:ms angegeben wurden; daher denn Architekturen anders ARM, empfehlen wir dringend, dass Sie /volatile:iso angeben, und verwenden explizite Synchronisierungsprimitiven und -systeminterne Funktionen des Compilers, wenn Sie Speicherplatz arbeiten, der über Threads freigegeben wird.

Sie können den volatile Qualifizierer verwenden, um Zugriff auf Speicheradressen bereitzustellen, die durch asynchrone Prozesse wie Unterbrechungssteuerungsprogramme verwendet werden.

Wenn volatile für eine Variable verwendet wird, die auch das Schlüsselwort __restrict besitzt, volatile Vorrang.

Wenn ein struct-Member als volatile markiert ist, wird volatile zur Ganzstruktur weitergegeben.Wenn eine Struktur keine Länge hat, die auf der aktuellen Architektur kopiert werden kann, indem eine Anweisung verwendet wird, ist volatile vollständig auf dieser Struktur möglicherweise verloren.

Das - Schlüsselwort volatile hat möglicherweise keine Auswirkungen auf ein Feld, wenn eine der folgenden Bedingungen zutrifft:

  • Die Länge des flüchtigen Felds überschreitet die maximale Größe, die auf der aktuellen Architektur kopiert werden kann, indem eine - Anweisung verwendet.

  • Die Länge äußersten enthaltenen - struct, oder wenn es ein Member des möglicherweise geschachtelten struct ist - überschreitet die maximale Größe, die auf der aktuellen Architektur kopiert werden kann, indem eine - Anweisung verwendet.

Obwohl der Prozessor nicht UN--cacheableSpeicherzugriffe neu angeordnet werden, müssen UN--cacheablevariablen als volatile markiert werden, um sicherzustellen, dass der Compiler nicht die Speicherzugriffe neu angeordnet werden.

Objekte, die deklariert werden als volatile, werden nicht in bestimmten Optimierungen verwendet, da sich ihre Werte jederzeit ändern können.Das System liest bei jeder Anforderung den aktuellen Wert eines flüchtigen Objekts, selbst wenn eine vorherige Anweisung bereits den Wert des Objekts abgefragt hatte.Außerdem wird der Wert des Objekts sofort auf Zuweisung geschrieben.

ISO kompatibel

Wenn Sie mit dem C#-flüchtiger Stoff-Schlüsselwort oder Vertrautem mit dem Verhalten von volatile in früheren Versionen von Visual C++ vertraut sind, beachten Sie, dass das volatile-Schlüsselwort des ISO-Standards C++11 unterscheidet und Visual Studio unterstützt wird, wenn die /volatile:iso-Compileroption angegeben wird.(Für ARM, hat sie standardmäßig festgelegt).Das volatile-Schlüsselwort im Code des ISO-Standards C++11 wird nur für Hardwarezugriff verwendet werden; verwenden Sie es nicht für InterThreadkommunikation.Für InterThreadkommunikation Verwendungsmechanismen wie std::atomic<T> von C++-Standardvorlagenbibliothek.

Microsoft-spezifisch

Wenn die /volatile:ms-Compileroption verwendete-durch Standardwert ist, wenn Architekturen anders ARM gezielt-d sind, generiert Compiler zusätzlichen Code, um die Reihenfolge mit Verweisen auf flüchtigen Objekten sowie zu Wartungsreihenfolge warten in Verweise zu anderen globalen Objekten.insbesondere:

  • Ein geschriebene auf ein flüchtiges Objekt (auch als flüchtig schreiben), hat Versionssemantik; das heißt, ein Verweis auf einen globalen oder statischen - Objekt, das auftritt, bevor eine Schreiboperation auf ein flüchtiges Objekt in der Anweisungsfolge zuvor auftritt, dass flüchtig in die kompilierte Binärdatei schreiben.

  • Ein Lesen eines flüchtigen Objekts (auch als flüchtiges Lesen) verfügt, Semantik abrufen, das heißt, ein Verweis auf einen globalen oder statischen - Objekt, das auftritt, nachdem ein Lesen des flüchtigen Speicher in der Anweisungsfolge nach auftritt, dass flüchtig in die kompilierte Binärdatei gelesen.

Dadurch können flüchtige Objekte für Speichersperren und -Freigaben in Multithreadanwendungen verwendet werden.

HinweisHinweis

Wenn er auf der erweiterten Garantie beruht, die bereitgestellt wird, wenn die /volatile:ms-Compileroption verwendet wird, ist der Code nicht-portabel.

Siehe auch

Referenz

C++-Schlüsselwörter

const-Feld (C++)

const und für flüchtigen verliert Zeiger