其他分享
首页 > 其他分享> > golang slice 错误认知

golang slice 错误认知

作者:互联网

很多人在博客看到 slice 扩容策略如下
这个结论是错误的
  a:= []int{1,2}
  a=  append(a,3,4,5)

 // 如果是2倍应该 容量是8  但是实际 5

####### 查阅源码 runtime/slice.go

func growslice(et *_type, old slice, cap int) slice {
   ...
    newcap := old.cap
	doublecap := newcap + newcap
	if cap > doublecap {
		newcap = cap
	} else {
		if old.cap < 1024 {
			newcap = doublecap
		} else {
			// Check 0 < newcap to detect overflow
			// and prevent an infinite loop.
			for 0 < newcap && newcap < cap {
				newcap += newcap / 4
			}
			// Set newcap to the requested cap when
			// the newcap calculation overflowed.
			if newcap <= 0 {
				newcap = cap
			}
		}
	}
   ...
}

####### 源码得知是根据

标签:1024,cap,newcap,认知,golang,slice,doublecap,old
来源: https://www.cnblogs.com/guanchaoguo/p/16208045.html