채널에서 읽을 때 큰 바이트 배열을 저장하기 위해 변수를 선언 할 때 golang에 더 구체적이고 권장 사례에 대한 조언을 요청하므로 중복 질문으로 표시하지 마십시오.golang에서 변수가 루프 나 조건 또는 케이스 범위를 벗어나면 변수는 어떻게됩니까?
이 멍청한 질문에 대해 용서해주십시오.하지만이 질문의 이유는 여러 채널에서 대형 바이트 배열을 읽는 고성능 스트림 소비자를 작성하는 데 가장 좋은 방법이 무엇인지 판단하기위한 호기심에 불과합니다. (조숙 한 최적화가 모든 악의 뿌리이지만, 이것은 더 많은 호기심입니다.) 나는 C
here과 유사한 유사한 senario에 대한 답변을 읽었지 만 가비지 수집 언어이므로 구체적인 답변을 요청하고 있으며 해당 설명서 here은 "정확성 관점에서 볼 때 변수가 어디에 있는지 알 필요가 없습니다. 할당됩니다 ".
내가 채널에서 읽을 수있는 다음과 같은 코드가있는 경우
,for {
select {
case msg := <-stream.Messages():
...snip...
변수 msg
은 case 문의 범위 내이다.
case
성명의 범위를 벗어나면 어떻게 될까요? 동일한 기본 함수로 선언되고 크기가stream
이면 큰 바이트 슬라이스가 될 수 있으므로 변수가 힙 또는 스택에 저장되고 힙이 있으면 가비지 수집되거나 스택 포인터가 들어갑니다 그림?- 이것은 무한 루프를위한 것이므로
stream
의 크기는 큰 바이트 슬라이스이므로 변수를 생성하고 오버 헤드 할 때마다 메모리를 할당하거나 변수를 앞에 선언하고 계속 덮어 쓰지 않으면 안됩니다 매 반복마다, 내가 모르는 쓰레기 수거가 있다면 쓰레기를 줄일 수 있을까? - 전혀 신경 쓰지 않아야하나요?
감사합니다.