로컬 구조체에 대한 포인터 반환
Go에서 다음과 같은 코드 조각은 C 배경을 가진 프로그래머에게 우려를 불러일으킬 수 있습니다.
type point struct { x, y int } func newPoint() *point { return &point{10, 20} }
질문이 생깁니다: newPoint가 스택에 새 포인트를 할당하는 것입니까, 아니면 heap?
포인터 이스케이프 분석
그 답은 Go의 포인터 이스케이프 분석에 있습니다. 함수를 검사하고 포인터 변수가 로컬 스택을 이스케이프하는지 여부를 결정합니다. 그렇다면 개체가 힙에 할당되어 프로그램 전체에서 메모리 안전이 보장됩니다.
이 코드 샘플에서 포인터 변수는 호출자에게 반환되므로 로컬 스택을 이스케이프합니다. 따라서 Go는 메모리 안전을 보장하기 위해 힙에 포인트 구조체를 할당합니다.
포인터가 로컬 함수를 이스케이프하지 않으면 컴파일러는 이를 스택에 자유롭게 할당할 수 있습니다. 단, 할당 위치는 포인터 이스케이프 분석의 정밀도에 따라 달라지므로 보장되지 않습니다.
위 내용은 Go의 `newPoint()`는 스택이나 힙에 구조체를 할당합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!