一个例子看 go slice 的内存预分配

一个例子看 go slice 的内存预分配

例子

package main

import "fmt"

func main() {
	s := []int{}
	fmt.Println("len", "cap")
	for i := 0; i < 17; i++ {
		s = append(s, i)
		fmt.Printf("%2d%4d\n", len(s), cap(s))
	}
}

结果

len cap
1   1
2   2       <---cap不够了,分配原来的2倍
3   4       <---cap不够了,分配原来的2倍
4   4
5   8
6   8
7   8
8   8
9   16      <---cap不够了,分配原来的2倍
10  16
11  16
12  16
13  16
14  16
15  16
16  16
17  32       <---cap不够了,分配原来的2倍

分析

从结果中可知cap的量是2的n次方增长的

猜你喜欢

转载自blog.csdn.net/u011714033/article/details/89335724