차이 휘발성 키워드 C ++ 및 Java, 알지?

휘발성 물질

영어 단어의 휘발성 의미는 다음과 같습니다 휘발성 불안정 의미.

휘발성 자바

자바가 휘발성 키워드는, 자바는 휘발성 역할 중 하나입니다 :

  • 확인 메모리 가시성을 확인하십시오 읽기 및 쓰기 변수는 현재 스레드 값이 아니라 현재의 thread의 캐시의 값보다 메모리에 최신 읽을 수 있도록하는 글로벌 순서를 가지고있다. 그러나 휘발성 키워드는 스레드의 상대적 순서가 제한된 애플리케이션 시나리오, 그래서 변수를 읽고 쓸 수 있음을 보증하지 않습니다.

  • 금지 명령 재정렬 (일-전에 원칙) 다음 JVM 명령을 재정렬하는 것은 영향을주지 않고, 프로그램의 운영의 효율성을 개선하기 위해 단일 스레드 최적화 지침의 실행의 실행 결과의 전제하에. 단일 스레드, 다중 스레드 명령을 다시 순서가 결과에 영향을 미칠 수 있습니다.

자바 질서 방법을 참고 :

  • 현재 쓰레드 및 기입하기 전에 수정 작업의 현재 값에 표시 동작.
  • 명령 최적화하는 동안, 우리는 휘발성 변수 액세스의 성명의 이행의 뒷면에 넣을 수 없으며 전면에 실행의 휘발성 변수 문으로 백업 할 수 있습니다.
C ++ 휘발성

휘발성 지정은 공격적인 최적화를 피해야한다, 그래서 객체가 언어에 의해 지정하지 않은 방법으로 그 값을 변경할 수있는 컴파일러 힌트입니다.

C ++ 휘발성 세 가지 속성에서 :

  • 변하기 쉬운
  • 최적화되지 않음
  • 순차

휘발성 대응 명시 적으로 최적화가 휘발성 변수, 각 변수를 금지하도록 컴파일러에 요청하고 명시 적으로 레지스터 % eax에 복사에 할당 할 필요가 필요합니다. 휘발성 키워드는 특정 상황에서, 변수 레지스터는 다를 수 있습니다, 임베디드 프로그래밍에 사용해야합니다. 그래서 선언 휘발성 데이터 레지스터 섹션은 컴파일러 최적화 변수 필수 부하 레지스터를 방지 할 필요가있다 "휘발성"입니다.

C ++ 수단의 휘발성 연속 :

  • C / C ++ 휘발성 변수는 비 휘발성 변수 간의 동작 컴파일러 가능성 순서로 교환한다.
  • C / C ++ 휘발성 변수 사이에, 컴파일러없이 교환 순서를 보장 할 수 있습니다.

C / C ++ 휘발성 키워드, 그리고-전에 일이 발생하여 멀티 스레드 프로그래밍, 조심하는 휘발성의 사용을 의미, 휘발성 변수를 사용하는 함정에 빠지지 않는 빌드에 사용할 수 없습니다.

하지만 휘발성 효과에 유사한 자바를 달성해야하는 경우? 명시 적 메모리 배리어는 코드 메모리에 따라서 가변 힘이 리프레시 CPU 레지스터에 삽입 될 수있다.

예를 들면 :

int n = 1;                                                                                         
int main() {
    volatile int x = n;
    asm volatile("" ::: "memory");
    volatile int y = n;
    return 0;
}
게시 된 118 개 원래 기사 · 원 찬양 5 ·은 10000 +를 볼

추천

출처blog.csdn.net/LU_ZHAO/article/details/104802876