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초 |