언어/C++

C++ 입출력 성능 향상

에린_1 2024. 4. 19. 20:05
728x90

C++ 입출력 성능 향상

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

c++에서 ios::sync_with_stdio, cin.tie, cout.tie를 사용하는 주된 이유는 입출력 성능을 향상시키기 위해서 이다.

  1. ios::sync_with_stdio(false);
    • 이 함수는 c++ 표준 입출력 스트림(cin, cout)과 c 표준 입출력 버퍼(stdin, stdout)의 동기화를 해제한다.
    • 기본적으로 c++ 표준 입출력은 c의 표준 입출력과 동기화되어 있어서 입출력 작업 시 버퍼를 공유하고 동기화하는 과정에서 오버헤드가 발생한다.
    • ios::sync_with_stdio(false);를 호출하면 c++과 c의 입출력 버퍼가 분리되어 동기화 오베헤드가 사라지므로 입출력 속도가 빨라진다.
    • 단. 이 함수를 호출한 이후에는 c표준 입출력 함수(scanf, printf등)를 사용하면 안된다.
  2. cin.tie(NULL), cout.tie(NULL);
    • cin과 cout은 기본적으로 묶여(tied) 있다. 즉, cin으로 입력을 받으면 자동으로 cout의 버퍼가 플러시된다.
    • 이는 입력과 출력의 순서를 보장하기 위한 것이지만, 불필요한 플러시로 인해 성능 저하가 발생할 수 있다.
    • cin.tie(NULL);과 cout.tie(NULL);을 호출하면 cin과 cout의 묶음을 해제하여 자동 플러시를 방지할 수 있다.
    • 이렇게 하면 입출력 속도가 향상될 수 있다.
728x90