C 언어 에서 volatile 키워드 의 깊이 있 는 설명
volatile 은 변 수 를 설명 하 는 데 사 용 됩 니 다.컴 파일 러 에 이 변 수 는 쉽게 변 할 수 있 습 니 다.이 변 수 를 컴 파일,읽 기,저장 할 때 어떠한 최적화 도 하지 마 십시오.따라서 컴 파일 된 프로그램 은 이 변 수 를 저장 하거나 읽 어야 할 때마다 변수 주소 에서 저장 데 이 터 를 직접 읽 고 최적화 하지 않 습 니 다.우리 가 내장 형 개발 을 할 때이 키 워드 는 역할 이 매우 크다.때때로 변수 주 소 는 시스템 의 외부 주소 일 수 있 기 때문에 그의 값 변 화 는 프로그램 제어 범위 에 있 지 않 고 수시로 변화 할 수 있 기 때문에 그 에 게 성명 을 해 야 한다.매번 읽 거나 저장 할 때마다 주 소 를 직접 조작 하고 다른 중간 상 사 를 거치 지 않 고 다음 에 나 는 하나의 예 로 vilatile 의 역할 을 분석 해 야 한다.
2.GCC 최적화 등급
예 를 들 기 전에 먼저 GCC 의 최적화 개념 을 알 아 보 자.보통 C 언어의 컴 파일 러 는 GCC 컴 파일 러 를 사용 하 는데 그 는 다음 과 같은 몇 가지 등급 의 최적화 가 있다.
3.volatile 성명 변수 테스트
저희 가 먼저 c 프로그램 을 써 보도 록 하 겠 습 니 다.
#include <stdio.h>
int main(void)
{
volatile int i=0;
i=1;
i=2;
i=3;
printf("%d",i);
return 0;
}
프로그램 은 변 수 를 만 들 고 i 에 대해 세 번 의 할당 을 합 니 다.-O 기본 최적화 등급 을 사용 하여 코드 를 컴 파일 하고 어 셈 블 리 결 과 를 볼 수 있 습 니 다.우 리 는 최적화 된 후에 i=1 과 i=2 가 최적화 되 었 고 생 성 된 어 셈 블 리 코드 가 없 으 며 마지막 값 을 가 져 와 i 에 게 할당 하 는 것 을 볼 수 있 습 니 다.우리 가 Volatile 성명 변 수 를 사용 하면
#include <stdio.h>
int main(void)
{
volatile int i=0;
i=1;
i=2;
i=3;
printf("%d",i);
return 0;
}
다음 과 같이 컴 파일 하면 변수 i 의 모든 할당 이 어 셈 블 리 코드 를 생 성 했 고 최적화 되 지 않 았 으 며 매번 할당 할 때마다 다시 주소 지정 할당 을 할 수 있 습 니 다.우리 가 volatile 을 사용 하여 외부 레지스터 에 비 친 주 소 를 설명 한 후에 위 에서 연속 으로 데 이 터 를 외부 레지스터 에 전송 하면 volatile 성명 을 사용 하면 보호 명령 이 최적화 되 지 않 고 프로그램 이 정상 적 인 기능 을 실현 할 수 있 습 니 다.물론 레지스터 에 대한 보 호 를 제외 하고 volatile 은 다 중 스 레 드 간 공유 변수의 보 호 를 사용 하기 도 합 니 다.만약 에 주의 하지 않 으 면 컴 파일 러 는 변수 가 현재 함수 에서 만 사용 되 고 최적화 되 며 다른 작업 에서 진행 되 는 변 화 는 무효 가 된다 고 생각 합 니 다.만약 에 중단 중 에 상태 변 수 를 바 꾸 어 다른 함수 에 검 측 을 한다 면 volatile 를 추가 하지 않 고 성명 을 하지 않 으 면 컴 파일 러 의 최적화 로 인해 무효 가 될 수 있 습 니 다.그래서 여러분 은 상기 세 가지 상황 에서 변 수 를 사용 할 때 컴 파일 러 의 최적화 등급 과 결합 하여 고려 할 수 있 습 니 다.변 수 를 volatile 키 워드 를 설명해 야 하 는 지!!
총결산
C 언어 에서 volatile 키워드 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 volatile 키워드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.