我在the runtime找不到它,但我想知道如何决定在重新分配地图或切片时可能需要多少内存。所以当我们看这个时(同样适用于切片):
test := map[int]string{}
for i := 0; i < 1000; i++ {
test[i] = fmt.Sprintf("test-%d", i)
}
首先会分配多少内存,以及在循环期间进行多少次重新分配?
我问这个是因为我试图弄清楚是否存在应用自定义重新分配策略有意义的情况(即使用数组而不是切片,并在需要时通过可能符合我的因素增长数组应用程序的要求)。
答案 0 :(得分:1)
它的要点是粗略地讲述和禁止边缘情况,容量通常加倍并且无法控制它。如果需要,您可以实现自己的增长/复制机制。您可以在此处阅读源代码:https://go.googlesource.com/go/+/master/src/runtime/slice.go#89