Computer/Learning C / C++2011. 5. 21. 19:39
C++을 배우고 있다. C와는 다르게 C++ 에선 << 오퍼레이터를 이용하여 스트림에 내용들을 "집어넣게" 되는데 우연히 이클립스를 끄적거리다가 특이한 것을 알아내게 되어, 까먹을까봐 여기 기록을 해 놓는다.

 

  /**

   *  @brief  Write a newline and flush the stream.

   *

   *  This manipulator is often mistakenly used when a simple newline is

   *  desired, leading to poor buffering performance.  See

   *  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#2 for more

   *  on this subject.

  */


  /**

   *  간단히 말해서 개행문자를 삽입하고 스트림을 비운다.

   *

   *  이 조작자(manipulator)는 단순히 개행문자만이 필요한 경우에도 종종 실수로(아니면 몰라서?)

   *  쓰인다. 그러나 이것은 아주 불량한 버퍼링 성능을 초래한다. 아래를 참고할 것.

   *  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#2 for more

   *  on this subject.

  */



 라는 문구가 보인다. 흔히 개행문자의 역할을 한다고 알려져 있지만 사실 이  endl은 개행 + 스트림 비우기(버퍼 비우기?)를 행한다.

메모리상의 스트림에 이 endl 을 행할 경우엔(cout 의 경우 화면으로 출력을 보여주기에 역시 성능 저하가 상당히 크지만) 이 endl 을 써도 큰 성능 차를 느낄 수 없을지 모르지만 파일스트림에 이 endl을 자주 행할경우, 디스크에 이 endl이 나타날 때 마다 쓰기를 행함으로써 상당한 성능 저하를 가져올 것으로 예상된다.(테스트는..........)

추가 > buffered stream에 한해서 버퍼를 비우는(flush)작업을 행한다. 파일스트림의 경우 buffered stream 에 해당이 되므로 적절한 시점에서의 사용이 매우 중요할듯.

single quote 와 back slash 를 타이핑 하는게 좀 귀찮기는 하지만 프로그램의 성능을 위해서라도 \n과 '\n' 를 쓰는게 바람직해보인다. 물론 필요할 때 endl을 쓰는 것은 매우 중요하다.

'Computer > Learning C / C++' 카테고리의 다른 글

출력 스트림과 endl  (0) 2011.05.21
fflush(stdin) 타도 -_-;  (0) 2011.04.23
GCC on iOS 4.2.1  (6) 2011.04.05
Posted by Adward
TAG , , ,

댓글을 달아 주세요