Go

메모리 관리

Stack vs heap, escape analysis, garbage collector, 메모리 프로파일링, pprof, 메모리 누수

24 면접 질문·
Senior
1

Go에서 stack 할당과 heap 할당의 주요 차이점은 무엇입니까?

답변

stack은 자동으로 관리되며 할당이 매우 빠릅니다(단순한 stack pointer 이동). stack의 변수는 함수가 반환될 때 자동으로 해제됩니다. heap은 메모리를 해제하기 위해 garbage collector가 필요하며, Go runtime이 관여하기 때문에 할당이 더 느립니다. 함수를 넘어 살아남는 변수나 컴파일 시점에 크기를 알 수 없는 변수는 heap으로 갑니다.

2

Go에서 escape analysis란 무엇입니까?

답변

escape analysis는 변수가 stack에 머무를 수 있는지 또는 heap에 할당되어야 하는지를 판단하기 위해 Go 컴파일러가 수행하는 정적 분석입니다. 컴파일러가 변수가 생성 함수 외부에서 참조된다고 감지하면(반환된 포인터, 전역 변수에 저장 등) 변수는 'escape'하여 heap에 할당됩니다. 이 분석은 메모리 할당을 자동으로 최적화합니다.

3

컴파일 시 escape analysis 결과를 확인하려면 어떻게 합니까?

답변

-gcflags=-m 플래그를 사용하면 escape analysis 결정을 확인할 수 있습니다. -m=2 또는 -m=3을 사용하면 변수가 escape하는 이유에 대한 더 자세한 정보를 얻을 수 있습니다. 예를 들어 'go build -gcflags=-m=2'는 변수가 heap으로 이동되었음을 나타내는 'moved to heap: x'와 같은 메시지를 표시합니다. 이 도구는 중요한 코드에서 메모리 할당을 최적화하는 데 필수적입니다.

4

지역 변수가 heap으로 escape하는 경우는 언제입니까?

5

Go에서 garbage collector의 주요 역할은 무엇입니까?

+21 면접 질문

다음 면접을 위해 Go을 마스터하세요

모든 질문, flashcards, 기술 테스트, 코드 리뷰 연습, 면접 시뮬레이터에 접근하세요.

무료로 시작하기