728x90
C++ 입출력 성능 향상
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
c++에서 ios::sync_with_stdio, cin.tie, cout.tie를 사용하는 주된 이유는 입출력 성능을 향상시키기 위해서 이다.
- ios::sync_with_stdio(false);
- 이 함수는 c++ 표준 입출력 스트림(cin, cout)과 c 표준 입출력 버퍼(stdin, stdout)의 동기화를 해제한다.
- 기본적으로 c++ 표준 입출력은 c의 표준 입출력과 동기화되어 있어서 입출력 작업 시 버퍼를 공유하고 동기화하는 과정에서 오버헤드가 발생한다.
- ios::sync_with_stdio(false);를 호출하면 c++과 c의 입출력 버퍼가 분리되어 동기화 오베헤드가 사라지므로 입출력 속도가 빨라진다.
- 단. 이 함수를 호출한 이후에는 c표준 입출력 함수(scanf, printf등)를 사용하면 안된다.
- cin.tie(NULL), cout.tie(NULL);
- cin과 cout은 기본적으로 묶여(tied) 있다. 즉, cin으로 입력을 받으면 자동으로 cout의 버퍼가 플러시된다.
- 이는 입력과 출력의 순서를 보장하기 위한 것이지만, 불필요한 플러시로 인해 성능 저하가 발생할 수 있다.
- cin.tie(NULL);과 cout.tie(NULL);을 호출하면 cin과 cout의 묶음을 해제하여 자동 플러시를 방지할 수 있다.
- 이렇게 하면 입출력 속도가 향상될 수 있다.
728x90
'언어 > C++' 카테고리의 다른 글
포인터 변수와 참조, Malloc과 New (0) | 2024.06.12 |
---|---|
플러시(Flush) (0) | 2024.04.19 |
#Pragma pack (0) | 2024.04.13 |
char* 형식의 인수가 LPCWSTR 형식의 매개 변수와 호환되지 않습니다. (0) | 2024.04.13 |
lower_bound, upper_bound, 이진탐색 (0) | 2024.02.22 |