티스토리 뷰
728x90
반응형
endl과 '\n'의 차이
표준출력을 하다보면 << std::endl과 << "\n" 을 사용하는데 둘 다 출력이 끝나면 한 줄이 넘어가는 기능은 똑같다.
하지만 깊숙히 들어가보면 작동하는 원리는 완전 다르다.
std::endl은 코드가 끝나면 바로 버퍼를 지워준다.
\n을 사용하는 경우 프로그램이 끝나면 버퍼를 지워준다.
그렇다면 버퍼란 무엇일까?
버퍼란?
- 우리가 입력을 받거나 출력을 할 때 한꺼번에 모아서 입력을 받거나 모아서 출력을 하는게 효율이 좋아서 사용한다.
- 버퍼의 대표적인 사례가 동영상을 전송할 때 버퍼링이 일어나는 것등. 전반적으로 다양한 경우에 많이 사용된다.
- 버퍼가 있는 방식은 입력 할 때 마다 한 글자 씩 버퍼로 이동한다.
- 입출력 작업은 매우 느린데 버퍼를 사용하면 효율적으로 작업할 수 있다.
- 하나하나 옮기면 느리지만 버퍼로 모아서 한 번에 옮기면 속도가 빠르다.
- 버퍼를 보내는 방법은 1.버퍼가 다 찼을 때, 2. 특정 조건(예를 들어\n)가 있다.
- 기본적으로 버퍼의 크기는 512byte, 4096byte 정도이다.(사용자가 입력할 때 많은 양을 입력하지 않을 것이다.)
- window에서는 버퍼를 사용하지 않는 입력 함수를 제공한다.(conio.h 헤더) (unix, 리눅스 시스템에서는 사용법이 까다롭다.)
즉, std::endl은 명령이 끝나면 버퍼를 지워주고 \n은 버퍼를 지워주지 않는다.
간단한 코드에서는 문제 없이 발생할 수 있겠지만 나중에 코드가 복잡해져 버퍼가 안 지워져 나중에 고생할 수도 있으니 명확히 하려면 std::endl을 쓰는게 좋은 것 같다.
참조
[C++] std::endl이 \n과 다른 점 - 출력버퍼 이해하기 - yechoi
따배씨(인프런 강의 - 8.1 입출력 버퍼)
728x90
반응형
'프로그래밍 정보 > C' 카테고리의 다른 글
[C언어]문자열, scanf, gets, fgets로 입력 받기 (0) | 2023.09.05 |
---|---|
[C언어] sizeof 연산자를 활용한 자료형, 배열, 포인터, 이차원 배열 크기 확인하기 (0) | 2023.06.16 |
[C/C++] 1차원 배열과 포인터, 2차원 배열과 포인터 정리 (0) | 2023.05.05 |
C언어 - 포인터 이해하기 (0) | 2023.04.24 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- tailwindcss
- Python
- raspberrypi
- Kernel
- JavaScript
- SQL
- 초아
- variable
- JSON
- Linux
- NestJS
- QT
- yocto
- 스타벅스
- opencv
- C
- 모닝독서
- 포인터
- CSS
- 자바스크립트
- js syntax
- 20.03.11.(목)
- 미라클모닝
- 라즈베리파이
- Til
- var
- tailwind
- JS
- 오늘의 공부
- 재미있는
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함