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


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.