다음을 통해 공유


volatile (C++)

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

volatile declarator ;

설명

사용할 수 있는 /휘발성 컴파일러 스위치 컴파일러가이 키워드를 해석 하는 방식을 수정 하.

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

사용할 수 있는 volatile 인터럽트 처리기와 같이 비동기 프로세스에 의해 사용 되는 메모리 위치에 대 한 액세스 한정자.

때 volatile 도 변수에서 사용 되는 __restrict 키워드를 volatile 우선적으로 적용 됩니다.

경우는 struct 로 표시 된 멤버 volatile, 다음 volatile 구조 전체에 전파 됩니다.구조체 복사 될 수 있는 길이 현재 아키텍처에 명령 하나를 사용 하 여 없는 경우 volatile 해당 구조에 완벽 하 게 손실 될 수 있습니다.

volatile 키워드는 다음 조건 중 하나가 참일 경우 필드에 아무런 영향을 가질 수:

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

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

프로세서 un-cacheable 메모리 액세스 순서를 변경 하지 않지만 un-cacheable 변수 이름으로 표시 되어야 합니다 volatile 컴파일러 메모리 재정렬 하지 것을 보장 하기 위해 액세스 합니다.

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

ISO 규격

익숙한 경우는 C# 휘발성 키워드 또는 동작을 잘 volatile Visual C++ 이전 버전에서 인식할 수는 C + + 11 ISO 표준 volatile 키워드는 달라 서 Visual Studio 지원 되지 때는 /volatile:iso 컴파일러 옵션을 지정 합니다.(ARM에 기본적으로 지정 된).volatile 키워드를 C + + 11 ISO 표준 코드입니다만 하드웨어 액세스; 하는 데 사용할 스레드 간 통신에는 사용 하지 않습니다.스레드 간 통신을 위한 메커니즘 사용 std::atomic <T> 에서 c + + 표준 템플릿 라이브러리.

Microsoft 전용

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

  • 휘발성 (volatile 쓰기) 개체에 대 한 쓰기를 릴리스 의미를가지고 있습니다. 즉, 휘발성 개체는 명령 시퀀스를 작성 하기 전에 발생 하는 전역 또는 정적 개체에 대 한 참조는 컴파일된 이진 파일에서 volatile 쓰기 전에 발생 합니다.

  • 휘발성 (volatile 읽기) 개체의 읽기 취득 의미를가지고 있습니다. 즉, 휘발성 메모리 명령 시퀀스에서 읽기 후에 발생 하는 전역 또는 정적 개체에 대 한 참조는 volatile에서 컴파일된 이진 파일을 읽은 후 이루어집니다.

이것은 휘발성 개체를 다중 스레드 응용 프로그램에서 메모리 잠금 및 해제에 사용할 수 있도록 합니다.

[!참고]

제공 될 때 향상 된 보증에 의존이 있는 /volatile:ms 컴파일러 옵션을 사용 하 고 이식할 코드입니다.

참고 항목

참조

C + + 키워드

const (C++)

const 및 volatile 포인터