> 백엔드 개발 > C++ > scanf()는 C 입력 속도에서 항상 iostream보다 성능이 뛰어납니까?

scanf()는 C 입력 속도에서 항상 iostream보다 성능이 뛰어납니까?

Patricia Arquette
풀어 주다: 2024-11-19 11:13:02
원래의
416명이 탐색했습니다.

Does scanf() Always Outperform iostream in C   Input Speed?

C 성능에서 scanf()가 iostream을 능가할 수 있습니까?

scanf()가 C에서 cin보다 빠른 입력 처리를 제공한다는 개념이 촉발되었습니다. 프로그래머들 사이의 논쟁. 이 기사에서는 이러한 방법 간의 성능 비교, 증거 조사 및 자세한 설명을 자세히 설명합니다.

성능 테스트

성능 차이를 평가하기 위해 간단한 프로그램은 다음과 같습니다. 표준 입력에서 숫자 목록을 읽고 XOR 연산을 수행하는 생성되었습니다. cin과 scanf()는 모두 별도의 구현에서 사용되었습니다:

  • cin 버전:
#include <iostream>

int main() {
  int parity = 0;
  int x;

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}
로그인 후 복사
  • scanf 버전 :
#include <stdio.h>

int main() {
  int parity = 0;
  int x;

  while (1 == scanf("%d", &x))
    parity ^= x;
  printf("%d\n", parity);

  return 0;
}
로그인 후 복사

결과

3,300만개 이상의 난수가 포함된 파일을 사용하여 실행 시간을 측정했습니다.

  • cin 버전: 24.3초
  • scanf 버전: 6.4초

최적화 고려 사항

컴파일러 최적화 설정 변경은 최소한의 영향을 미쳤습니다.

향상된 iostream 성능

성능 격차는 부분적으로 iostream이 C I/O 기능과 동기화를 유지하기 때문에 발생하는 것으로 나타났습니다. std::ios::sync_with_stdio(false) 명령을 사용하여 이 동기화를 비활성화하면 iostream의 성능이 크게 향상됩니다.

#include <iostream>

int main() {
  int parity = 0;
  int x;

  std::ios::sync_with_stdio(false);

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}
로그인 후 복사

새 결과

iostream 동기화를 비활성화한 후 :

  • cin 동기화 버전: 21.9초
  • scanf 버전: 6.8초
  • 동기화 없는 cin 버전: 5.5초

결론

C의 원시 입력 처리에 있어 scanf()가 실제로 cin보다 빠르다는 증거가 있습니다. 그러나 iostream의 동기화가 비활성화된 경우 iostream이 scanf()와 최적화된 cin 버전 모두를 능가하는 탁월한 선택이 됩니다.

따라서 특정 시나리오에서는 scanf()가 더 빠를 수 있지만 iostream은 동기화에 대한 더 나은 제어 기능을 제공합니다. 그리고 더 다양한 기능을 제공합니다. 속도가 중요한 경우 iostream 동기화를 비활성화하는 것이 좋습니다.

위 내용은 scanf()는 C 입력 속도에서 항상 iostream보다 성능이 뛰어납니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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