C 프로그램에서 scanf()를 사용하는 것이 cin보다 빠르나요?
입력을 읽을 때 scanf()를 사용하는 것이 cin보다 빠르다는 주장 C에는 그것에 대한 진실이 있습니다. 설명은 다음과 같습니다.
속도 벤치마킹
주장을 확인하기 위해 표준 입력에서 숫자 목록을 읽고 배타적 OR( XOR) 연산. 프로그램의 두 가지 버전이 테스트되었습니다. 하나는 iostream(cin 및 cout)을 사용하고 다른 하나는 stdio(scanf 및 printf)를 사용했습니다.
많은 양의 입력(33,280,276 난수)으로 테스트했을 때 scanf 버전은 iostream 버전보다 훨씬 뛰어난 성능을 발휘하여 24.3초에 비해 6.4초 만에 작업을 완료했습니다.
속도 차이가 나는 이유
iostream과 C의 I/O 기능을 동기화하기 때문에 속도 차이가 발생합니다. iostream을 사용한 입력 및 출력 작업은 C I/O 함수(예: getchar(), putchar())와 동기화되어 추가 오버헤드가 발생합니다.
ios::sync_with_stdio(false)를 사용한 최적화
이 동기화 문제를 해결하려면, std::ios::sync_with_stdio(false)를 사용하면 iostream과 stdio 간의 동기화를 비활성화할 수 있습니다. 이를 통해 iostream은 동기화 오버헤드 없이 보다 효율적으로 작동할 수 있습니다.
동기화를 비활성화한 후 iostream 버전의 성능이 크게 향상되어 scanf 버전보다 빠른 5.5초 만에 작업을 완료했습니다.
결론
벤치마킹 결과에 따르면 scanf()를 사용하는 것이 실제로 사용하는 것보다 빠릅니다. C 프로그램에서 많은 양의 입력을 읽을 때 cin. 그러나 std::ios::sync_with_stdio(false)의 최적화를 통해 iostream은 잠재적으로 scanf()보다 성능이 뛰어날 수 있으므로 입력 및 출력 작업에 선호되는 선택으로 간주되어야 합니다.
위 내용은 `scanf()`는 C의 `cin`보다 정말 빠르며 `cin`의 성능을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!