728x90
C++
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의 묶음을 해제하여 자동 플러시를 방지할 수 있다.
- 이렇게 하면 입출력 속도가 향상될 수 있다.
플러시(Flush)
- 출력 버퍼(output buffer)의 내용을 실제로 출력 장치(화면, 파일 등)에 쓰는 작업을 의미한다. c++에서 cout과 같은 출력 스트림을 사용할 때, 출력 데이터는 즉시 출력 장치로 전송되지 않고 출력 버퍼에 저장된다. 출력 버퍼는 일정한 크기를 가지고 있으며, 버퍼가 가득 차거나 개행문자(\n)을 만나면 자동으로 플러시된다.
- 플러시가 발생하면 출력 버퍼의 내용이 실제 출력 장치로 전송되고, 버퍼는 비워진다. 이러한 버퍼링은 출력 성능을 향상시키기 위해 사용된다. 매번 출력할 될 때마다 장치에 접근하는 것보다 버퍼에 모아 한 번에 출력하는 것이 효율적이기 때문입니다.
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.04.21 백준, 기획 (0) | 2024.04.23 |
---|---|
24.04.20 VeryBadChild (0) | 2024.04.20 |
24.04.18 AWS 강연 (1) | 2024.04.18 |
24.04.17 서버 개발기, git readme 작성 (0) | 2024.04.17 |
24.04.16 서버 개발기 (0) | 2024.04.17 |