C++ 입출력 속도 차이

언어입력방식수행시간(초)
C/C++scanf0.798
C/C++getchar(*)0.390
C++std::cin2.051
C++std::ios::sync_with_stdio(false) + std::cin0.796
javajava.util.Scanner6.068
javajava.io.BufferedReader(*)0.934
golangfmt.Scan44.557
golangbufio.Reader + fmt.Fscan9.899
golangbufio.Scanner(*)1.299

(*): 문자(열) -> 정수 변환 필요


cin,cout 보다 scanf,printf 가 컴파일속도가 훨씬 빠르기 때문에 scanf, printf를 쓰는 것을 권장하지만 cin, cout 을 굳이 쓰고 싶다면 코드에서 ios::sync_with_stdio(false) 를 선언해주면 속도가 얼추 비슷해지는 것을 알 수 있다.

cin, cout 의 성능을 높히는 방법을 소개하겠다.

1. ios::sync_with_stdio(false)

ios::sync_with_stdio cpp의 iostream을 c의 stdio와 동기화시켜주는 역할을 합니다. 이는 iostream, stdio의 버퍼를 모두 사용하기 때문에 딜레이가 발생하게 됩니다. ios::sync_with_stdio(false)는 이 동기화 부분을 끊는 함수입니다. 이를 사용하면 c++만의 독립적인 버퍼를 생성하게 되고 c의 버퍼들과는 병행하여 사용할 수 없게 됩니다. 대신 사용하는 버퍼의 수가 줄어들었기 때문에 속도는 높아지게 됩니다.

2.cin.tie(NULL);cout.tie(NULL);

디폴트는 cout,cin이 tie되어 있습니다.이것을 풀어줍니다.

3.std::endl 대신에 "\n" 사용하기

endl는 개행만 해주는 것이아니라 개행 + 출력버퍼를 비워야 하기때문에 느립니다.


'C++' 카테고리의 다른 글

C++ 인라인 함수  (0) 2018.05.02
C++, C와 무엇이 다를까  (0) 2018.04.30

+ Recent posts