go语言 – 切片的内存优化

切片是对底层数组的引用。只要切片存在,就不能释放数组的内存,即不能对此数组进行垃圾收集。某些情况下,这会导致内存浪费。

例如,假设有一个非常大的数组,但我们只使用其中的一小部分。我们通过创建切片来访问该数组,这里由于切片引用了数组,虽然只使用了数组的一小部分数据,但整个数组内存不能被释放。

解决这个问题的方法是使用复制函数func copy(dst, src []T) int来复制那个切片,我们可以使用新的切片,原来的数组就可以被垃圾收集。

package main

import (  
    "fmt"
)

func countries() []string {  
    countries := []string{"China", "USA", "Singapore", "Germany", "India", "Australia"}
    neededCountries := countries[:len(countries)-2]
    countriesCpy := make([]string, len(neededCountries))
    copy(countriesCpy, neededCountries) // 复制 neededCountries 到 countriesCpy
    return countriesCpy
}
func main() {  
    countriesNeeded := countries()
    fmt.Println(countriesNeeded)
}

复制切片countriesCpy后,数组countries就可以被释放了。



浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载