애즈이프 규칙

As-if rule

C++프로그래밍 언어에 대한 표준 이 언어를 위한 컴파일러에서는 프로그램에 편집 중에, 이 표준에서 명시한 대로 그러한 최적화, 프로그램의"식별할 수 있는 행동"에는 변화가 없게 만들어 제공되는 optimizing[1]변환 적용할;이것은 대부분 뜻을 허용할 이 프로그램은 environm에서 공연한다는 어떤 행위.멤머는지정된 순서로 발생합니다.이 규칙은 일반적으로 as-if [2]규칙이라고 불립니다.

규칙에는 동작 변경 최적화가 허용되는 세 가지 주요 예외가 있습니다.첫 번째는 정의되지 않은 동작을 나타내는 프로그램은 면제된다는 것입니다. 관찰 가능한 동작은 어쨌든 명확하게 정의되지 않기 때문에 어떤 변환도 유효합니다.다른 두 가지 예외는 객체의 복사에 관한 것으로 복사 엘리션반환값 최적화라고 불립니다.

as-if 규칙의 효과는 특정 컴파일러 구현에 따라 달라집니다.예를 들어 Microsoft C++ 컴파일러에서는 라이브러리 함수에 대한 호출에 대한 명령 재정렬과 같은 특정 최적화가 생략됩니다.이는 이러한 호출이 입력/출력 액션 또는 표시된 메모리 위치에 대한 액세스를 유발할 수 있기 때문입니다.휘발성 및 그 순서의 변경은 관찰 가능한 [3]동작을 변화시킵니다.

as-if 규칙은 C++에 고유하지 않습니다.C, Rust, Go, Ocaml다른 많은 프로그래밍 언어에도 최적화를 허용하는 규칙이 있습니다(특히 인라인화).

레퍼런스

  1. ^ "최근 컴파일러의 장점 컴파일러의 뚜껑을 열다" Matt Godbolt CppCon2017 토크 (2017년 9월 29일)
  2. ^ 2018년 4월에 취득된 Cppreference의 애즈-if 규칙
  3. ^ Brais, Hadi (May 2015). "Compilers – What Every Programmer Should Know About Compiler Optimizations, Part 2". MSDN Magazine. Microsoft.