> 백엔드 개발 > C++ > 본문

`scanf()`는 C의 `cin`보다 정말 빠르며 `cin`의 성능을 어떻게 최적화할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-11-18 11:29:02
원래의
378명이 탐색했습니다.

Is `scanf()` Really Faster Than `cin` in C  , and How Can We Optimize `cin`'s Performance?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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