C 성능에서 scanf()가 iostream을 능가할 수 있습니까?
scanf()가 C에서 cin보다 빠른 입력 처리를 제공한다는 개념이 촉발되었습니다. 프로그래머들 사이의 논쟁. 이 기사에서는 이러한 방법 간의 성능 비교, 증거 조사 및 자세한 설명을 자세히 설명합니다.
성능 테스트
성능 차이를 평가하기 위해 간단한 프로그램은 다음과 같습니다. 표준 입력에서 숫자 목록을 읽고 XOR 연산을 수행하는 생성되었습니다. cin과 scanf()는 모두 별도의 구현에서 사용되었습니다:
#include <iostream> int main() { int parity = 0; int x; while (std::cin >> x) parity ^= x; std::cout << parity << std::endl; return 0; }
#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만개 이상의 난수가 포함된 파일을 사용하여 실행 시간을 측정했습니다.
최적화 고려 사항
컴파일러 최적화 설정 변경은 최소한의 영향을 미쳤습니다.
향상된 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 동기화를 비활성화한 후 :
결론
C의 원시 입력 처리에 있어 scanf()가 실제로 cin보다 빠르다는 증거가 있습니다. 그러나 iostream의 동기화가 비활성화된 경우 iostream이 scanf()와 최적화된 cin 버전 모두를 능가하는 탁월한 선택이 됩니다.
따라서 특정 시나리오에서는 scanf()가 더 빠를 수 있지만 iostream은 동기화에 대한 더 나은 제어 기능을 제공합니다. 그리고 더 다양한 기능을 제공합니다. 속도가 중요한 경우 iostream 동기화를 비활성화하는 것이 좋습니다.
위 내용은 scanf()는 C 입력 속도에서 항상 iostream보다 성능이 뛰어납니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!