C 코드에서 최적화 플래그를 사용하면 명령문의 재정렬이 발생할 수 있어 정확성에 대한 우려가 높아집니다. 실행 순서. 컴파일러의 최적화와 이것이 명령문 순서에 어떤 영향을 미칠 수 있는지 이해하는 것이 중요합니다.
불행히도 C에는 명령문 순서를 직접 적용하는 기본 제공 메커니즘이 없습니다. 컴파일러는 확립된 연산 의미와 정수 추가와 같은 연산에서 관찰 가능한 효과가 없다는 점을 고려하여 최적화 중에 명령어를 자유롭게 재정렬할 수 있습니다.
정확한 타이밍 측정을 위해 다음을 수행하는 것이 좋습니다. 다음과 같은 특수 기술을 사용합니다.
foo 함수의 실행 시간을 측정하려는 의도가 있는 다음 예를 고려하십시오.
using Clock = std::chrono::high_resolution_clock; auto t1 = Clock::now(); // Statement 1 auto output = foo(input); // Statement 2 auto t2 = Clock::now(); // Statement 3 auto elapsedTime = t2 - t1;
데이터 핀서링 기술을 사용하여 특정 계산이 유지되도록 코드를 변경할 수 있습니다. 측정된 시간 간격 내에서:
auto input = 42; auto t1 = Clock::now(); // Statement 1 DoNotOptimize(input); auto output = foo(input); // Statement 2 DoNotOptimize(output); auto t2 = Clock::now(); // Statement 3 return t2 - t1;
여기서 DoNotOptimize는 입력 및 출력 데이터를 최적화할 수 없는 것으로 표시하여 컴파일러에 의한 제거 또는 재정렬. 이는 컴파일러 최적화에도 불구하고 원하는 계산의 정확한 타이밍을 보장합니다.
위 내용은 정확한 타이밍 측정을 위해 C에서 명령문 실행 순서를 어떻게 보장할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!