"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 리턴 스택 할당 포인터가 안전합니까?

리턴 스택 할당 포인터가 안전합니까?

2025-03-23에 게시되었습니다
검색:542

Is Returning Stack-Allocated Pointers Safe in Go?
패키지 메인 수입 (수입) "FMT" )) func main () { fmt.println (*(something ())) } funcc something something () *문자열 { S : = "a" 반환 & s }

C와 달리이 코드는 완벽하게 유효하며 런타임 오류가 발생하지 않습니다. GO는 탈출 분석으로 알려진 정교한 기술을 사용하기 때문입니다. 값이나 포인터가 탈출되는 경우 컴파일러는 스택 대신 쓰레기 수집 된 힙에 배치합니다. 이 경우, 반환 된 포인터 *는 무언가 () 함수의 범위를 피하고 힙에 배치됩니다. Go FAQ는 메모리 할당에 관한 규칙을 간결하게 설명합니다. 컴파일러가 함수가 더 이상 참조되지 않으면 함수가 더 이상 참조되지 않으면 heap의 변수가 매달린 오류를 방해하지 않는다는 것을 증명할 수 없습니다. 이 전략은 수동 메모리 관리의 필요성을 제거하고 기능이 반환 된 후 뾰족한 데이터에 액세스 할 수 있도록합니다.

컴파일 중에 컴파일러의 탈출 분석 최적화를 관찰하려면 -gcflags -m 옵션을 사용하십시오. 이 옵션은 힙 및 스택 할당에 관한 결정에 대한 통찰력을 제공합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3