6월 15, 2016

cin으로 대량의 데이터 읽을 때 주의 사항

cin으로 large data를 읽어야 하는 경우, cin.sync_with_stdio(false) 옵션으로 cin과 stdio의 sync를 해제.


explanation

cin은 기본 옵션으로 stdio와 syncronized되어 있음. FILE * 기반의 stdio와 iostream은 각각 구분되는 구현과 버퍼를 가지고 있기 때문에, 만약 두개가 같이 쓰인다면 문제가 생길 수 있음. 이런 문제를 해결하기 위해 stdio와 iostream를 syncronize하는데, 일반적으로 cin이 한번에 하나의 char씩만 읽도록 제한하는 방법을 사용.

그러나 이 때문에 input buffering을 할 수가 없어 많은 데이터를 읽을 경우 이 때문에 오버헤드가 굉장히 커지기 때문에, 대량의 데이터 입력이 필요한 경우 stdio와 cin의 sync를 해제해 주는 것이 좋음.


reference

댓글 없음:

댓글 쓰기