Udostępnij za pośrednictwem


lotne (C++)

Kwalifikator typu, który umożliwia stwierdzenie, że obiekt może być modyfikowana w programie przez sprzęt.

volatile declarator ;

Uwagi

Można użyć /lotnych przełącznik kompilatora, aby zmodyfikować sposób kompilator interpretowania tego słowa kluczowego.

Interpretuje programu Visual Studio volatile słowa kluczowego w różny sposób w zależności od architektury docelowego.Dla ARM, jeśli nie /volatile określono opcję kompilatora, kompilator wykonuje tak, jakby /volatile:iso zostały określone.Dla architektur innych niż ARM, jeśli nie /volatile określono opcję kompilatora, kompilator wykonuje tak, jakby /volatile:ms zostały określone; w związku z tym, architektury, inne niż ARM zaleca się określenie /volatile:isoi używać jawne synchronizacyjne i intrinsics kompilatora, gdy mamy do czynienia z pamięci, która jest współużytkowana przez wątki.

Można użyć volatile kwalifikator, aby zapewnić dostęp do lokalizacji pamięci, które są używane przez asynchroniczne procesy, takie jak procedury obsługi przerwań.

Gdy volatile jest używany w zmiennej, która ma również __restrict słowa kluczowego, volatile ma pierwszeństwo.

Jeśli struct Członkowskich jest oznaczony jako volatile, następnie volatile jest propagowana na całej struktury.Jeśli struktury ma długość, który można skopiować bieżącej architektury przy użyciu jednej instrukcji, volatile mogą zostać utracone całkowicie na tej struktury.

volatile Słowem kluczowym może nie mają wpływu na pole Jeśli spełniony jest jeden z następujących warunków:

  • Długość pola lotnych przekracza maksymalny rozmiar, który można kopiować bieżącej architektury przy użyciu jednej instrukcji.

  • Długość peryferyjnych zawierające struct— lub jest członkiem ewentualnie zagnieżdżonych struct— przekracza maksymalny rozmiar, który można skopiować na bieżącej architektury przy użyciu jednej instrukcji.

Mimo że przetwórca nie zmienić kolejność dostępów do pamięci un-cacheable, un-cacheable zmienne muszą być oznaczone jako volatile do zagwarantowania, że kompilator nie zmienić kolejność pamięci uzyskuje dostęp.

Obiekty, które zostały zgłoszone jako volatile nie są używane w niektórych optymalizacje, ponieważ ich wartości można zmienić w dowolnym momencie.System zawsze wartość bieżącą wartość lotnych obiektu kiedy jest wymagane, nawet jeśli poprzedniej instrukcji poprosił o wartość z tego samego obiektu.Ponadto wartość obiektu jest natychmiast zapisane w przydziale.

Zgodne z normami ISO

Jeśli znasz C# lotnych słowo kluczowe lub znane z zachowaniem volatile we wcześniejszych wersjach języka Visual C++, należy pamiętać, że C ++ 11 normy ISO volatile słowo kluczowe jest inna i jest obsługiwany w programie Visual Studio podczas /volatile:iso określono opcję kompilatora.(Dla ARM, to jest określone domyślnie).volatile Słowa kluczowego w C ++ 11 ISO standardowy kod ma być używany tylko w przypadku dostępu do sprzętu; nie jest używana do komunikacji inter-thread.W przypadku komunikacji inter-thread korzystać z mechanizmów takich jak std::atomic <T> z Standardowa biblioteka szablonów.

Programu Microsoft

Gdy /volatile:ms jest używana opcja kompilatora — domyślnie, gdy są kierowane architektur innych niż ARM — kompilator generuje kod dodatkowe, aby zachować kolejność wśród odwołania do obiektów lotnych poza utrzymywaniem zamawianiu do odwołania do innych obiektów globalnych.W szczególności:

  • Zapis do lotnych obiektu (znany również jako lotnych zapis) ma semantykę wydania; oznacza to odwołanie do obiektu globalnych lub statycznych, które występują przed zapisem obiektowi lotnych w sekwencji instrukcji nastąpi przed tym lotnych zapisu w skompilowanym pliku binarnego.

  • Odczyt lotnych obiektu (znany również jako lotnych odczytu) ma semantykę Acquire; oznacza to odwołanie do obiektu globalnych lub statycznych, który występuje po odczytu pamięci nietrwałej w sekwencji instrukcji nastąpi po tym volatile przeczytać w skompilowanym pliku binarnego.

Dzięki temu rzadko używanych obiektów przeznaczonych do blokady pamięci i wydań w aplikacjach wielowątkowych.

[!UWAGA]

Kiedy jest przeprowadzana na podstawie zwiększonych gwarancji, że został podany podczas /volatile:ms jest używana opcja kompilatora, kod jest nie przenośna.

Zobacz też

Informacje

Słów kluczowych języka C++

Const (C++)

Const i lotnych wskaźniki