로컬 구조체에 대한 포인터 반환


85

다음과 같은 구조를 가진 코드 샘플이 있습니다.

type point struct {
  x, y int
}

func newPoint() *point {
  return &point{10, 20}
}

나는 C ++ 배경을 가지고 있고 그것은 나에게 오류처럼 보입니다. 그러한 구조의 의미는 무엇입니까? 스택 또는 힙에 새 포인트가 할당됩니까?


1
비슷한 질문 (문서에 대한 답 링크) : stackoverflow.com/questions/12098435/...
— 데니스 Séguret

@ DenysSéguret 유사하지 않습니다
— mangusta

답변:


109

Go는 포인터 이스케이프 분석을 수행합니다. 이 경우 포인터가 로컬 스택을 이스케이프하면 개체가 힙에 할당됩니다. 로컬 함수를 이스케이프하지 않는 경우 컴파일러는 스택에 할당 할 수 있습니다 (보장 할 수는 없지만 포인터 이스케이프 분석이 포인터가이 함수에 대해 로컬에 있음을 증명할 수 있는지 여부에 따라 다릅니다).


13
다음은 Go의 이스케이프 분석을 좀 더 자세히 살펴 보는 블로그 포스트 (면책 조항 : 제가 썼습니다)입니다. scvalex.net/posts/29
— scvalex

@LilyBallard가 귀하의 답변을 완전히 얻지 못했습니다. 이스케이프 포인터의 사실을 증명하는 것은 항상 가능하지만 이스케이프하지 않는다는 사실을 증명하는 것은 불가능하다는 것을 의미합니까?
— mangusta

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.