少于1024Byte双倍扩容,大于1024Byte是1.25倍扩容,通过查表法确定实际扩容值。
下面是代码演示:
package main
import (
"fmt"
)
// 少于1024Byte双倍扩容,大于1024Byte是1.25倍扩容,通过查表法确定实际扩容值
// windows系统查表 C:\Program Files\Go\src\runtime\sizeclasses.go
// 找 第一个bytes/obj 大于等于 1.25倍扩容的值
// 一个一个append
// 1024 * 1.25 * 4 = 5120 查表 5376 / 4 = 1344
// 1024 * 1.25 * 8 = 10240 查表 10240 / 8 = 1280
// 批量append
// 1025 * 8 = 8200 查表 9472 / 8 = 1184
func main() {
var arr1 []int64
for i := 0; i < 1025; i++ {
arr1 = append(arr1, int64(i))
}
fmt.Printf("arr1 len=%d, cap=%d\n", len(arr1), cap(arr1))
var arr2 []int64
arr2 = append(arr2, arr1...)
fmt.Printf("arr2 len=%d, cap=%d\n", len(arr2), cap(arr2))
}
输出结果:
arr1 len=1025, cap=1280
arr2 len=1025, cap=1184