Sdílet prostřednictvím


těkavé (C++)

Typ kvalifikátoru, který lze prohlásit, že objekt lze upravit v programu hardwarem.

volatile declarator ;

Poznámky

Můžete použít /těkavých přepínače upravit, jak kompilátor interpretuje toto klíčové slovo.

Visual Studio interpretuje volatile klíčové slovo odlišně v závislosti na cílové architektury.Pro ARM, není-li /volatile není zadána možnost kompilátoru, kompilátor provádí jako /volatile:iso bylo zadáno.Pro architektury než ARM, není-li /volatile není zadána možnost kompilátoru, kompilátor provádí jako /volatile:ms byl zadán; proto pro architektury než ARM důrazně doporučujeme zadat /volatile:isoa použít explicitní synchronizace primitiva a překladač při jednání s pamětí, který je sdílen mezi podprocesy.

Můžete použít volatile kvalifikátoru poskytují přístup k paměťovým místům, které využívají asynchronní procesy, jako jsou například obslužné rutiny přerušení.

Při volatile se používá na proměnnou, která má také __restrict klíčové slovo, volatile přednost.

Pokud struct člen je označen jako volatile, pak volatile je rozšířena do celé struktury.Pokud struktura nemá délka, kterou lze zkopírovat na aktuální architektura pomocí jedné instrukce, volatile mohou zcela ztratit na této struktuře.

volatile Klíčové slovo může mít žádný vliv na pole, pokud platí jedna z následujících podmínek:

  • Délka těkavých pole překračuje maximální velikost, kterou lze zkopírovat na aktuální architektura pomocí jedné instrukce.

  • Délku nejvzdálenější obsahující struct, nebo pokud je členem případně vnořené struct– překračuje maximální velikost, kterou lze zkopírovat na aktuální architektura pomocí jedné instrukce.

Přestože procesor není změnit pořadí un-cacheable paměti přístupů, un-cacheable proměnné musí být označen jako volatile zaručit, že kompilátor není pořadí paměť přistupuje.

Objekty, které jsou deklarovány jako volatile nejsou použity v některé optimalizace, protože jejich hodnoty lze kdykoli změnit.Systém vždy čte aktuální hodnotu těkavých objektu v případě, že je požadováno, i v případě, že předchozí instrukce o hodnotu ze stejného objektu.Hodnota objektu je také zapsána okamžitě na přiřazení.

Kompatibilní se standardem ISO

Pokud jste obeznámeni s C# těkavých klíčové slovo nebo chování, kteří znají volatile v dřívějších verzích aplikace Visual c++, uvědomte si, C ++ 11 Norma ISO volatile klíčové slovo se liší a je podporována v aplikaci Visual Studio při /volatile:iso zadána možnost kompilátoru.(Pro ARM, je určena ve výchozím nastavení).volatile Klíčové slovo v C ++ 11 normy ISO kód má být použit pouze pro přístup k hardwaru; nepoužívejte ji pro inter-thread komunikaci.Pro inter-thread komunikaci pomocí mechanismů std::atomic <T> z C++ Standard Template Library.

Microsoft specifické

Když /volatile:ms je použita možnost kompilátoru – ve výchozím nastavení v případě, že jsou zaměřeny architekturou než ARM – kompilátor vygeneruje dodatečný kód, chcete-li zachovat řazení mezi odkazy na nestálých objektů kromě zachování pořadí odkazů na jiné globální objekty.Zejména:

  • Zápis těkavých objektu (označované také jako těkavé zápis) má sémantiku vydání; odkaz na objekt globální nebo statické, který předchází zápisu těkavých objektu v sekvence instrukcí, dojde před tímto těkavých psát zkompilované binární.

  • Čtení těkavých objektu (označované také jako těkavé čtení) má získání sémantiku; odkaz na globální nebo statické objektu, ke kterému dochází po čtení nestálé paměti sekvence instrukcí, dojde po této volatile číst ve zkompilované binární.

To umožňuje nestálých objektů pro uzamknutí paměti a vydání ve víceprocesových aplikacích.

[!POZNÁMKA]

Kdy vychází Rozšířená záruka, že poskytla, kdy /volatile:ms je použita možnost kompilátoru, kód je non přenosné.

Viz také

Referenční dokumentace

Klíčových slov jazyka C++

Const (C++)

Const a těkavé ukazatele