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

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

Nov 18, 2024 am 11:29 AM

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까? C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까? Mar 03, 2025 pm 05:52 PM

C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

Gulc : C 도서관은 처음부터 구축되었습니다 Gulc : C 도서관은 처음부터 구축되었습니다 Mar 03, 2025 pm 05:46 PM

Gulc : C 도서관은 처음부터 구축되었습니다

C 언어 함수 형식 문자 케이스 변환 단계 C 언어 함수 형식 문자 케이스 변환 단계 Mar 03, 2025 pm 05:53 PM

C 언어 함수 형식 문자 케이스 변환 단계

C 언어 기능의 정의 및 호출 규칙은 무엇이며 C 언어 기능의 정의 및 호출 규칙은 무엇이며 Mar 03, 2025 pm 05:53 PM

C 언어 기능의 정의 및 호출 규칙은 무엇이며

뚜렷한 사용 및 문구 공유 뚜렷한 사용 및 문구 공유 Mar 03, 2025 pm 05:51 PM

뚜렷한 사용 및 문구 공유

메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까? 메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까? Mar 03, 2025 pm 05:51 PM

메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까?

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? Mar 12, 2025 pm 04:50 PM

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? Mar 12, 2025 pm 04:52 PM

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?

See all articles