Blog Content

    티스토리 뷰

    cin과 cout이 scanf와 printf보다 느린 이유와 해결방법

    cin과 cout이 그렇게 느린 이유는 C 라이브러리의 stdio buffer와 동기화하는과정 때문에 느려진다고 한다.

    즉, iostream, stdio의 버퍼를 모두 사용하기 때문에 딜레이가 발생하게 된다.


    std::ios::sync_with_stdio(false);

    std::ios_base::sync_with_stdio(false);

    std::cin.sync_with_stdio(false);

    이를 해결하기 위해서는 위의 3가지 중 1개의 함수를 사용하면 된다.

    이유는 ios::sync_with_stdio는 cpp의 iostream을 c의 stdio와 동기화시켜주는 역할을 하는데

    위의 함수를 사용하면 동기화를 끊고 c++만의 독립적인 버퍼를 생성하게 되고 c의 버퍼들과는 병행하여 사용할 수 없게 된다.

    따라서 사용하는 버퍼의 수가 줄어들었기 때문에 속도는 높아지게 됩니다.


    https://www.acmicpc.net/board/view/1124

    하지만 위 글을 참조해보면 sync_with_stdio(false)가 런타임 에러를 내는 경우도 있다.


    따라서 시간이 중요한 문제라면 scanf와 printf를 쓰는것이 나은 것 같다.


    'C++ 공부' 카테고리의 다른 글

    strlen함수의 잘못된 사용  (0) 2018.09.06
    문자열 입력 함수 scanf, gets, fgets  (0) 2018.09.04
    typedef int Data 라고 쓰는 이유  (0) 2018.08.28
    #define과 enum의 차이  (0) 2018.08.16
    new로 2차원 배열 만들기  (0) 2018.08.16

    Comments