2017-12-10 31 views
3

저는 코딩과 프로그래밍에 대한 새로운 지식을 가지고 있습니다. 나는 몇 편의 비디오를보고 몇 권의 책을 처음 읽음으로써 내가 누를 수있는 것을 보았지만 그 중 일부를 이해하는 데 어려움을 겪고있다.홍조는 정확히 무엇입니까?

동영상 중 하나는 endl을 사용했고 다른 하나는을 기본 "Hello World"소개에 사용했습니다. 저는이 둘의 차이점에 대해 더 알고 싶었습니다.

그래서 나는 endl\n의 차이는 endl 느리게 만드는, \n는 없지만 endl 코드를 플러시하는 것입니다 것으로 알고 있습니다. 그만큼 Google에서 검색 할 수 있습니다.

그러나 플러시 C++을 검색 할 때 특수 용어로 인해 의미가 무엇인지 머리 또는 꼬리를 만들 수 없습니다.

플러시를하는 것이 무엇을 의미하며, 언제 그리고 왜 그렇게하고 싶습니까? 버퍼 란 무엇입니까?

가능한 경우 매우 기본적인 방법으로 설명하십시오.

+0

[여기] (http://en.cppreference.com/w/cpp/io/basic_ostream/flush) 설명이 도움이됩니까? 귀하의 질문은 Stack Overflow에서 간결하게 대답 해 줄 수있는 조금 넓습니다. – user0042

+3

문자 그대로 생각하십시오. 당신은 일정량 (목욕탕은 _buffer_)까지 욕조에 물을 조금 흘려 보내고, flush()하면 플러그를 잡아 당깁니다. – user0042

+0

@ user0042 - 좀 더 리터럴 한 생각 과정은 화장실을 사용합니다. 저수지 (완충액)가 채워지며, 저수지의 물이 변기로 이동하도록 허용하여 홍조가 배출됩니다. – Peter

답변

0

플러시하려면 버퍼를 비우십시오.

이제 버퍼는 데이터를 저장하기위한 임시 저장 영역입니다.

ENDL와 \ n을 모두 개행 문자를 인쇄 할 수 있습니다 그러나이 둘 사이에 약간의 차이가 있습니다 : ENDL의 경우, 버퍼는 버퍼

을 플러시 내부 전화의 사용에 의해 삭제됩니다

은 \ n의 경우, 개행 문자가 인쇄되어 있지만 추가적인 호출

그래서 심하고, ENDL보다 더

을하지 바와 같이 버퍼가 플러싱되지 \ n

+0

내게 당신이 이미 알고있는 것을 반복했다. – feareoc

+0

성능면에서는 endl이 실제로 \ n보다 나쁘다. 플러싱이란 성능상의 이유로 여기에 버퍼와 버퍼를 지름길로 남겨 둡니다. 따라서 성능 문제로 endl을 사용하지 않습니다. –

0

버퍼는 (A)의 입력을 저장하는 임시 메모리이다 할 수있는 프로세스 시간이 좀 걸릴거야.

데이터를 손실하지 않을 수도 있습니다. 빠른 컴퓨터와 느린 컴퓨터 간의 통신을 생각해보십시오. 빠른 컴퓨터는 느린 컴퓨터가 처리 할 수있는 속도보다 높은 속도로 바이트를 전송할 수 있지만 느린 컴퓨터는 바이트를 처리하고 다른 컴퓨터는 여전히 도착하고 처리 대기중인 버퍼에 저장됩니다.

또는 성능상의 문제 일 수 있습니다. 모든 연산은 연산에 의해 처리되는 데이터의 크기와 무관 한 정적 시간 비용을 가지고 있습니다 (일부 데이터를 초기화하고, 자원을 기다릴 필요가 있습니다 ...). 그 비용이 무시할 수 없다면, 가능한 최소한의 비용을 지불하는 것이 흥미로울 수 있습니다. 그래서 우리는 버퍼를 사용하여 더 많은 데이터를 수집하고 여러 연산을 하나로 합칩니다.

경우에 따라 화면에 인쇄하는 데 그리 정적 인 시간이 없으므로 기본적으로 버퍼가 사용되며 충분한 바이트를받은 경우에만 데이터가 인쇄됩니다.

버퍼 플러시 란 버퍼를 비우고 강제로 데이터를 처리하는 것을 의미합니다. 소량의 데이터를 즉시 처리하려는 경우 유용 할 수 있습니다.

예를 들어 "나이를 입력하십시오 :"라고 인쇄하고 사용자가 숫자를 입력 할 때까지 기다리려면 사용자가 실제로 해당 요청을 보는 것이 좋습니다! 여기에서 버퍼를 플러시하는 것은 필수적입니다.

그러나 큰 프로젝트를 컴파일 할 때 컴파일러와 같은 많은 텍스트를 인쇄하는 프로그램을 생각하면 정적 시간을 소비하지 않도록 버퍼를 채우지 않도록하는 것이 좋습니다 당신이 보낸 각 블럭마다 (예를 들어 컴파일러의 각 소스 파일). 그리고 마지막 블록 이후에 우리가 버퍼의 중간에 오지 않도록 확실히 플러시하십시오. 이것은 매우 가능성이 있습니다.