다음을 통해 공유


volatile (C++)

하드웨어에 의해 프로그램에서 수정할 수 있는 개체를 선언하는 데 사용할 수 있는 형식 한정자입니다.

구문

volatile declarator ;

설명

/volatile 컴파일러 스위치를 사용하여 컴파일러가 이 키워드를 해석하는 방법을 수정할 수 있습니다.

Visual Studio는 대상 아키텍처에 volatile 따라 키워드를 다르게 해석합니다. ARM의 경우 /volatile 컴파일러 옵션이 지정되지 않은 경우 컴파일러는 /volatile:iso가 지정된 것처럼 수행됩니다. ARM 이외의 아키텍처의 경우 /volatile 컴파일러 옵션이 지정되지 않은 경우 컴파일러는 /volatile:ms가 지정된 것처럼 수행되므로 ARM 이외의 아키텍처의 경우 /volatile:iso를 지정하고 스레드 간에 공유되는 메모리를 처리할 때 명시적 동기화 기본 형식 및 컴파일러 내장 함수를 사용하는 것이 좋습니다.

한정자를 volatile 사용하여 인터럽트 처리기와 같은 비동기 프로세스에서 사용되는 메모리 위치에 대한 액세스를 제공할 수 있습니다.

__restrict 키워드 volatile 도 있는 변수에 사용되는 경우 volatile 우선합니다.

멤버가 struct 표시된 volatilevolatile 경우 전체 구조체로 전파됩니다. 하나의 명령을 volatile 사용하여 현재 아키텍처에서 복사할 수 있는 길이가 구조체에 없는 경우 해당 구조체에서 완전히 손실될 수 있습니다.

volatile 다음 조건 중 하나가 true인 경우 키워드가 필드에 영향을 주지 않을 수 있습니다.

  • volatile 필드의 길이가 현재 아키텍처에서 하나의 명령을 사용하여 복사할 수 있는 최대 크기를 초과합니다.

  • 가장 바깥쪽에 포함되거나 struct중첩된 struct멤버인 경우 하나의 명령을 사용하여 현재 아키텍처에서 복사할 수 있는 최대 크기를 초과합니다.

프로세서는 캐시할 수 없는 메모리 액세스를 다시 정렬하지 않지만 캐시할 수 없는 변수를 표시 volatile 하여 컴파일러가 메모리 액세스의 순서를 다시 지정하지 않도록 해야 합니다.

특정 최적화에 사용되지 않는 것으로 volatile 선언된 개체는 해당 값이 언제든지 변경될 수 있기 때문입니다. 이전 명령에서 동일한 개체의 값을 요청했더라도 시스템은 요청될 때 항상 휘발성 개체의 현재 값을 읽습니다. 또한 개체의 값은 할당 시 즉시 기록됩니다.

ISO 준수

C# volatile 키워드에 익숙하거나 이전 버전의 MICROSOFT C++ 컴파일러(MSVC)의 volatile 동작에 익숙한 경우 C++11 ISO Standard volatile 키워드는 다르며 /volatile:iso 컴파일러 옵션이 지정된 경우 MSVC에서 지원됩니다. ARM의 경우 기본적으로 지정됩니다. volatile C++11 ISO 표준 코드의 키워드는 하드웨어 액세스에만 사용되며 스레드 간 통신에는 사용하지 마세요. 스레드 간 통신의 경우 C++ 표준 라이브러리의 std::atomic<T>와 같은 메커니즘을 사용합니다.

ISO 규칙의 끝

Microsoft 전용

/volatile:ms 컴파일러 옵션을 사용하는 경우(기본적으로 ARM 이외의 아키텍처가 대상으로 지정된 경우) 컴파일러는 다른 전역 개체에 대한 참조 순서를 유지하는 것 외에도 휘발성 개체에 대한 참조 간의 순서를 유지하기 위한 추가 코드를 생성합니다. 특히 다음 사항에 주의하십시오.

  • volatile 개체 쓰기(volatile 쓰기)는 Release 의미 체계를 사용합니다. 즉 명령 시퀀스에서 volatile 개체에 쓰기 전에 발생하는 전역 또는 정적 개체에 대한 참조는 컴파일된 이진 파일에서 volatile 쓰기 전에 발생합니다.

  • volatile 개체 읽기(volatile 읽기)는 Acquire 의미 체계를 사용합니다. 즉 명령 시퀀스에서 volatile 메모리 읽기 다음에 발생하는 전역 또는 정적 개체에 대한 참조는 컴파일된 이진 파일에서 volatile 읽기 다음에 발생합니다.

이렇게 하면 다중 스레드 애플리케이션에서 메모리 잠금 및 릴리스에 휘발성 개체를 사용할 수 있습니다.

참고 항목

/volatile:ms 컴파일러 옵션을 사용할 때 제공되는 향상된 보장을 사용하는 경우 코드는 이식 가능하지 않습니다.

Microsoft 전용 종료

참고 항목

키워드
const
const 및 volatile 포인터