溫馨提示×

golang如何避免內存逃逸

養魚的貓咪
479
2021-04-23 17:31:08
欄目: 編程語言

golang中避免內存逃逸的方法有:1.盡量避免使用接口類型;2.避免使用變量指針作為參數;3.設定slice長度,避免容量超出;4.減少外部引用, 如指針;

golang如何避免內存逃逸

出現內存逃逸的情況有:

1.發送指針或帶有指針的值到channel,因為編譯時候無法知道那個goroutine會在channel接受數據,編譯器無法知道什么時候釋放。

2.在一個切片上存儲指針或帶指針的值。比如[]*string,導致切片內容逃逸,其引用值一直在堆上。

3.切片的append導致超出容量,切片重新分配地址,切片背后的存儲基于運行時的數據進行擴充,就會在堆上分配。

4.調用接口類型時,接口類型的方法調用是動態調度,實際使用的具體實現只能在運行時確定,如一個接口類型為io.Reader的變量r,對r.Read(b)的調用將導致r的值和字節片b的后續轉義并因此分配到堆上。

5.在方法內把局部變量指針返回,被外部引用,其生命周期大于棧,導致內存溢出。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女