傳回指向本地結構體的指標
在Go 中,類似下面的程式碼片段可能會引起具有C 背景的程式設計師的C 背景的程式設計師的關注:
type point struct { x, y int } func newPoint() *point { return &point{10, 20} }
問題出現了: newPoint 是在堆疊上分配一個新點還是堆疊?
指針逃脫分析
答案就在Go的指針逃脫分析中。它檢查函數並確定指標變數是否逃逸本地堆疊。如果是,則將該物件分配在堆上,確保整個程式的記憶體安全。
在此程式碼範例中,指標變數會轉義本地堆疊,因為它會傳回給呼叫者。因此,Go 會將指標結構分配在堆上以確保記憶體安全。
如果指標沒有逃逸本機函數,編譯器將可以自由地將其指派在堆疊上。然而,分配位置並不能保證,因為它取決於指針逃逸分析的精確度。
以上是Go 的 newPoint() 是在堆疊還是堆疊上分配結構體嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!