C + + 의 volatile 키워드
도입부
아래 코드 에 무슨 문제 가 있 는 지 맞 춰 보 세 요.
?
1
2
3
4
void
Delay(
UINT32
n)
{
while
(—n);
}
답:
원래 코드 는 완전히 정상 이지 만 성능 을 최적화 하기 위해 컴 파 일 러 의 최 적 화 를 열 었 다.그러나 이 함수 가 컴 파일 러 에 의 해 최적화 되 었 다 는 것 을 발견 했다.최적화 되 는 것 을 방지 하기 위해 서 함수 의 매개 변수 에 volatile 을 추가 해 야 합 니 다.
?
1
2
3
4
void
Delay(
volatile
UINT32
n)
{
while
(—n);
}
도입부
이 코드 에 무슨 문제 가 있 는 지 다시 맞 춰 보 세 요.
?
1
2
3
4
int
square(
volatile
int
*ptr)
{
return
*ptr * *ptr;
}
답:
* ptr 가 volatile 형 인 자 를 가리 키 기 때문에 컴 파일 러 는 다음 과 같은 코드 를 생 성 합 니 다.
?
1
2
3
4
5
6
7
int
square(
volatile
int
*ptr)
{
int
a,b;
a = *ptr;
b = *ptr;
return
a * b;
}
* ptr 의 값 이 예상 치 못 하 게 변 할 수 있 기 때문에 a 와 b 는 다 를 수 있 습 니 다.결국, 이 코드 는 당신 이 원 하 는 제곱 값 이 아 닐 수도 있 습 니 다!정확 한 코드 는 다음 과 같 습 니 다.
?
1
2
3
4
5
6
int
square(
volatile
int
*ptr)
{
int
a;
a = *ptr;
return
a * a;
}
본문
volatile 키 워드 는 형식 수정자 로 서 특정한 컴 파일 러 가 알 수 없 는 요소 에 의 해 변 경 될 수 있 음 을 나타 낸다. 예 를 들 어 운영 체제, 하드웨어 또는 다른 스 레 드 등 이다.레지스터 에 접근 하 는 속도 가 RAM 보다 빠 르 기 때문에 컴 파 일 러 는 일반적으로 액세스 외부 RAM 을 줄 이 는 최 적 화 를 한다.이 키워드 성명 의 변 수 를 만나면 컴 파일 러 는 이 변 수 를 방문 하 는 코드 를 최적화 하지 않 고 특수 주소 에 대한 안정 적 인 접근 을 제공 할 수 있 습 니 다.
volatile 의 본 뜻 은 '변 하기 쉬 운' 이지 만 '원본 메모리 주 소 를 직접 액세스 하 는 것' 으로 번역 하 는 것 이 더욱 적합 하 다.'변 하기 쉬 운' 은 외적 요인 으로 인해 발생 하 는 것 이다. 예 를 들 어 다 중 스 레 드, 중단 등 은 volatile 로 수식 한 변수 가 '변 하기 쉬 운' 것 이 아니 라 외부 원인 이 없 으 면 volatile 정 의 를 사용 해도 변 하지 않 는 다.
이 키 워드 를 사용 하 는 예 는 다음 과 같 습 니 다.
?
1
int
volatile
nVint;
// volatile , , 。 。
이러한 코드 에 대해:
?
1
2
3
4
volatile
int
i = 10;
int
a = i;
...
// , , i
int
b = i;
volatile 은 i 는 수시로 변화 가 발생 할 수 있 으 며, 이 를 사용 할 때마다 i 의 주소 에서 읽 어야 하기 때문에 컴 파일 러 가 생 성 한 어 셈 블 리 코드 는 i 의 주소 에서 데 이 터 를 다시 읽 어 b 에 넣 습 니 다.최적화 방법 은 컴 파일 러 가 i 에서 데 이 터 를 읽 은 코드 간 의 코드 가 i 에 대해 조작 한 적 이 없 기 때문에 마지막 에 읽 은 데 이 터 를 b 에 자동 으로 넣 는 것 이다.i 에서 다시 읽 는 게 아니 라이렇게 되면 i 가 레지스터 변수 이거 나 포트 데 이 터 를 표시 하면 오류 가 발생 하기 쉬 우 므 로 volatile 은 특수 주소 에 대한 안정 적 인 접근 을 확보 할 수 있 습 니 다.
일반적으로 volatile 은 다음 과 같은 몇 가지 곳 에 사용 합 니 다.
또한 상기 몇 가지 상황 은 데이터 의 완전 성 (서로 관련 된 몇 개의 표 지 를 반 쯤 읽 고 다시 쓰 는 것 이 중단 되 었 다) 을 동시에 고려 해 야 한다. 1 에서 인 터 럽 트 를 통 해 이 루어 질 수 있 고 2 중 작업 스케줄 을 금지 할 수 있 으 며 3 중 은 하드웨어 의 좋 은 디자인 에 의존 할 수 밖 에 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.