다음은 간단한 경우에 대한 간단한 테스트입니다. 표준 입력에서 숫자 목록을 읽고 모든 숫자를 XOR하는 프로그램입니다.
iostream 버전 :
#include <iostream>
int main(int argc, char **argv) {
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 argc, char **argv) {
int parity = 0;
int x;
while (1 == scanf("%d", &x))
parity ^= x;
printf("%d\n", parity);
return 0;
}
결과
세 번째 프로그램을 사용하여 33,280,276 개의 난수가 포함 된 텍스트 파일을 생성했습니다. 실행 시간은 다음과 같습니다.
iostream version: 24.3 seconds
scanf version: 6.4 seconds
컴파일러의 최적화 설정을 변경해도 결과가 전혀 바뀌지 않는 것 같습니다.
따라서 실제로 속도 차이가 있습니다.
편집 : 사용자 clyfish 는 속도 차이가 주로 CI / O 기능과 동기화를 유지하는 iostream I / O 기능으로 인해 발생 한다고 지적 합니다. 다음을 호출하여이 기능을 끌 수 있습니다 std::ios::sync_with_stdio(false);
.
#include <iostream>
int main(int argc, char **argv) {
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 version: 21.9 seconds
scanf version: 6.8 seconds
iostream with sync_with_stdio(false): 5.5 seconds
C ++ iostream이 승리합니다! 이 내부 동기화 / 플러싱은 일반적으로 iostream i / o를 느리게하는 것으로 밝혀졌습니다. stdio와 iostream을 믹싱하지 않는 경우 끄면 iostream이 가장 빠릅니다.
코드 : https://gist.github.com/3845568