C 베이스 상세 설명 volatile 키워드
volatile 키워드로 설명하지 않은 변수 i는 접근할 때 cpu의 레지스터에서 직접 값을 얻을 수 있습니다. (이전에 i가 접근했기 때문에, 즉 이전에 메모리에서 i의 값을 꺼내 어떤 레지스터에 저장했기 때문입니다.) 메모리에서 값을 추출하지 않고 메모리에서 값을 얻는 이유는컴파일러 최적화 코드의 결과입니다.
상기 두 가지 상황의 차이는 어셈블리 코드로 컴파일된 후에 둘은 다르다는 데 있다.이렇게 하는 이유는 변수 i가 자주 변할 수 있기 때문에 특수 주소에 대한 안정적인 접근을 보장할 수 있기 때문이다.
volatile 키워드는 형식 수식자로서, 형식 변수는 일부 컴파일러가 알 수 없는 요소에 의해 변경될 수 있음을 나타낸다. 예를 들어 운영체제, 하드웨어, 또는 다른 라인 등이다.이 키워드가 설명하는 변수를 만나면 컴파일러는 이 변수에 접근하는 코드를 최적화하지 않고 특수 주소에 대한 안정적인 접근을 제공할 수 있습니다.
이 키워드를 사용하는 예는 다음과 같습니다.
- int volatile nVint;
volatile에서 설명한 변수의 값을 사용하도록 요구할 때, 시스템은 앞의 명령이 방금 그곳에서 데이터를 읽었음에도 불구하고, 항상 자신이 있는 메모리에서 데이터를 다시 읽는다.그리고 읽은 데이터는 즉시 저장됩니다.
예를 들면 다음과 같습니다.
- volatile int i=10;
- int a = i;
- ...
- // , , i
- int b = i;
volatile는 i는 수시로 변할 수 있으며, 사용할 때마다 i의 주소에서 읽어야 하기 때문에 컴파일러가 생성한 어셈블리 코드는 i의 주소에서 데이터를 다시 읽어 b에 넣는다.최적화 방법은 컴파일러가 i에서 데이터를 두 번 읽은 코드 사이의 코드가 i에 대해 조작을 하지 않은 것을 발견하면 지난번에 읽은 데이터를 자동으로 b에 놓는 것이다.다시 i에서 읽는 게 아니라이로써 i가 레지스터 변수이거나 포트 데이터를 표시하면 오류가 발생하기 쉬우므로volatile는 특수 주소에 대한 안정적인 접근을 보장할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 키워드this(동력 노드 Java 학원 정리)Leaf 클래스의main 방법에서, 우리는new에서 Leaf 실례 x를 하나 만들었고, 그 다음에 x 실례 호출 increment() 방법을 사용했다.만약 increment () 가 일반적인 방법이나void 방법이라...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.