2011-07-04 8 views
3

는 ++ ", 당신이 이 변경됩니다 때 결코 알지 못할"Volatile 키워드를 사용해야하는 최적화 컴파일러에는 어떤 것들이 있습니까? C에서 생각

이 규정 휘발성 컴파일러를 알려줍니다 말한다, 그 변수의 안정성 에 기반한 최적화를 수행에서 컴파일러를 방지 할 수 있습니다.

컴파일러가 수행하는 최적화 (캐싱 외)에는 어떤 것이 있습니까?

+0

'휘발성'자격으로 인해 방지되는 최적화에 대해 특별히 묻고 있습니까? –

답변

9

가장 기본적인 최적화가 있습니다 : 변수의 값을 CPU 레지스터에 저장하는 것. 휘발성을 선언하면 레지스터에서 캐시 된 복사본을 사용하는 대신 코드 생성기가 항상 메모리에서 값을 다시로드합니다.

3

일반적인 최적화는 읽기 또는 쓰기 작업의 순서를 변경하는 것입니다. 이것은 "stall"(컴파일러가 대기 또는 no-ops를 주입하여 hazards을 방지하는 경우)로 이어질 수있는 파이프 라인 연산에 대해 더 나은 병렬 처리를 달성하는 데 도움이 될 수 있습니다.

변수가 휘발성으로 표시되면 메모리 장벽을 사용하여 이러한 종류의 작업 순서가 변경되는 것을 방지 할 수 있습니다. 어떻게 구현되는지는 구현에 달려 있습니다. Microsoft C++ 컴파일러의 기능을 확인하려면 MSDN reference on volatile을 참조하십시오.

관련 문제