七叶笔记 » golang编程 » Golang 切片的扩容

Golang 切片的扩容

 func growslice(et *_type, old slice, cap int) slice {
newcap := old.cap
doublecap := newcap + newcap
if cap > doublecap {
newcap = cap
} else {
if old.len < 1024 {
newcap = doublecap
} else {
for 0 < newcap && newcap < cap {
newcap += newcap / 4
}
if newcap <= 0 {
newcap = cap
}
}
}  

给定一个期望扩容数字:

  • 如果期望大于两倍的老容量,那么新的容量就是这个期待容量
  • 如果期望小于两倍的老容量,并且老的容量个数小于1024,那么新的容量就是老容量的二倍
  • 如果期望小于两倍的老容量,并且老的容量个数大于1024,那么这个容量就按照之前老容量的1.25倍开始增加,直到大于了期望容量,开始跳出循环
  • 如果老容量是小于等于0的,那么新的容量直接等于期望容量

当然这只是初步确定容量,下面还要进行内容的对齐。

相关文章