1 回答
TA贡献1820条经验 获得超9个赞
您可以在 src/运行时/切片中追加时看到容量计算的算法.go - 第 162 行func growslice(et *_type, old slice, cap int)
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
}
}
}
首先将旧切片容量乘以 2。如果乘以 2 后的容量仍小于新切片容量,则取新切片容量(追加多个 elem)
如果新片小于旧片容量的两倍,请将旧片容量乘以 2
如果旧片容量大于或等于 1024,则新片容量乘以旧片容量乘以 1.25
- 1 回答
- 0 关注
- 72 浏览
添加回答
举报