> 백엔드 개발 > C++ > 최적화된 C 코드에서 명령문 재정렬을 방지하려면 어떻게 해야 합니까?

최적화된 C 코드에서 명령문 재정렬을 방지하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-12-01 14:26:14
원래의
663명이 탐색했습니다.

How Can I Prevent Statement Reordering in Optimized C   Code?

C에서 명령문 순서 시행

질문:

어떻게 하면 최적화가 적용된 경우에도 C 코드의 명령문 활성화되어 있습니까?

답변:

일반적인 가정에도 불구하고 C는 본질적으로 특히 최적화 하에서 명령문 순서를 강제하지 않습니다. 특정 문은 최적화된 코드에서 잘못된 순서로 나타날 수 있으며, 이는 시간에 민감한 작업과 같은 시나리오에서 문제가 될 수 있습니다.

해결책:

기본적으로 연산 조작 엄격한 순서를 달성하기 위한 추가와 같은 기본 작업의 의미는 실현 가능하지 않습니다. 컴파일러 및 하드웨어 설계 최적화는 이러한 작업에 관찰 가능한 타이밍 속성이 없다는 가정을 전제로 합니다.

그러나 마이크로 벤치마킹을 위한 효과적인 기술이 등장했습니다.

불투명 데이터 조작 :

  • 계산 주변에서 입력 및 출력 데이터를 "최적화 불가능"으로 표시합니다. 질문.
  • 이렇게 하면 계산이 타이밍에 따라 제한되는 동시에 경계 내에서 최적화가 가능해집니다.

라이브러리 지원:

  • Google Benchmark와 같은 라이브러리는 데이터를 다음과 같이 표시하기 위한 DoNotOptimize 기능을 제공합니다. 최적화할 수 없습니다.
  • 사용 예:
template <class T>
__attribute__((always_inline)) inline void DoNotOptimize(const T &value) {
  asm volatile("" : "+m"(const_cast<T &&>(value)));
}
로그인 후 복사

컴파일러 지시어:

  • 일부 컴파일러는 "__attribute__(( optimize("no-reorder")))" 또는 "__restrict__"를 사용하여 재정렬을 방지합니다.
  • 그러나 이러한 지시문이 항상 충분하거나 이식 가능한 것은 아닙니다.

참고:

C 표준 위원회에서 탐색 중입니다. DoNotOptimize와 같은 API 표준화를 통해 명령문 순서 적용을 더욱 용이하게 합니다.

위 내용은 최적화된 C 코드에서 명령문 재정렬을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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