C++/C++

sync_with_stdio(false) - 입출력 스트림 속도 올리기

Elan 2021. 6. 1. 15:27

아래 명령을 수행하면 C++의 표준 입출력 스트림(I/O Stream) 속도가 올라간다

std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);

이유는 위의 명령이 C++의 입출력 스트림과 C의 입출력 스트림간의 동기화를 끊는 역할을 하기 때문이다.

 

C++의 std::cin과 std::cout의 속도가 C의 scanf와 printf에 비해 속도가 현저히 떨어지는 이유도 스트림간의 동기화가 있어서 그렇다.

 

하지만 동기화를 끊게 되면 C의 입출력 함수를 더 이상 사용하지 않겠다는 의미다.

따라서 C의 입출력 함수(scanf, printf, getchar 등)를 사용할 경우 오류가 발생 할 수 있다.

 

 

동기화를 끊음으로서 C++의 stream들은 독립적인 buffer를 갖게되고, buffer의 수가 줄어들며 속도가 빨라지게 된다.

 

 

입출력 속도 비교
  동기화 끊기 전 동기화 끊은 후
scanf 0.9206초  
cin  2.1742초 0.5938초
printf 0.8614초  
cout 0.9229초 0.8272초