1.如果在方法中返回指向局部變量的指針,並且它被外部引用,並且它的生命周期比堆棧長,那麽它將溢出。
2.發送壹個指向通道的指針或帶有指針的值,因為不可能知道哪個goroutine將在編譯時接收通道中的數據,編譯器也無法知道何時釋放它。
3.將指針或帶有指針的值存儲在切片上。例如【】*string,它會導致切片的內容轉義,其引用值始終在堆上。
4.因為片的追加導致超出容量,所以片重新分配地址,並且片後面的存儲基於運行時數據擴展,這些數據將在堆上分配。
5.對接口類型調用方法,該方法是動態調度的,僅在運行時已知。
1和go語言中的接口類型方法調用是動態的,因此在編譯階段無法確定。將所有類型結構轉換為接口的過程會涉及內存轉義,因此訪問頻率較高的函數應盡可能多地調用接口。
2.不要盲目使用變量指針作為參數。雖然復制減少了,但變量轉義的開銷更大。
3.提前設置切片長度,以避免頻繁超出容量和重新分配。