> 백엔드 개발 > C++ > C 컴파일러 최적화는 인수 평가 순서 모호성을 악용합니까?

C 컴파일러 최적화는 인수 평가 순서 모호성을 악용합니까?

Linda Hamilton
풀어 주다: 2024-12-14 01:54:13
원래의
882명이 탐색했습니다.

Does C   Compiler Optimization Exploit Argument Evaluation Order Ambiguity?

C에서 인수 평가 순서의 컴파일러 최적화

C 표준에서는 컴파일러가 재량에 따라 함수 인수의 평가 순서를 선택할 수 있습니다. 이는 실제 구현이 성능을 향상시키기 위해 이러한 모호성을 활용하는지 여부에 대한 의문을 제기합니다.

대부분의 경우 컴파일러는 인수 평가 순서를 최적화하지 않습니다. 그러나 아키텍처, 호출 규칙 및 인수 유형이 동작에 영향을 미칠 수 있습니다. x86 시스템에서 Pascal 호출 규칙은 인수를 왼쪽에서 오른쪽으로 평가하는 반면 C 규칙(__cdecl)은 오른쪽에서 왼쪽으로 진행됩니다. 플랫폼에 구애받지 않는 프로그램은 일반적으로 예상치 못한 상황을 피하기 위해 호출 규칙을 고려합니다.

예를 들어 클래식 코드 조각에서:

int i = 0;
foo(i++, i++);
로그인 후 복사

컴파일러는 Pascal 호출 규칙에서 i보다 먼저 i를 평가할 수 있지만 __cdecl에서는 반대가 발생할 수 있습니다. 그럼에도 불구하고 결과는 정의되지 않으며 특정 평가 순서에 의존하는 것은 권장되지 않습니다.

언어 표준에서는 인수 평가 순서를 "지정되지 않음"으로 분류합니다. 이는 명시적으로 정의되지 않았거나 허용되지 않음을 의미합니다. 이는 구현에 따른 동작을 허용하고 추상 기계의 비결정적 특성을 강조합니다.

위 내용은 C 컴파일러 최적화는 인수 평가 순서 모호성을 악용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿