如下代码切片的cap函数为什么返回的是6不是5?
package main
import "fmt"
func main() {
var s []int
printSlice(s) // len=0 cap=0 []
// 添加一个空切片
s = append(s, 0)
printSlice(s) // len=1 cap=1 [0]
// 这个切片会按需增长
s = append(s, 1)
printSlice(s) // len=2 cap=2 [0 1]
// 可以一次性添加多个元素
s = append(s, 2, 3, 4)
printSlice(s) // len=5 cap=6 [0 1 2 3 4] cap为什么是6?
}
func printSlice(s []int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
回复
1个回答

test
2024-07-20
cap >= len 。具体是怎么确定的,得去看 golang 的源码。不同版本的策略还可能发生变化。
这个不会每次都开辟恰好够用的内存,为的是可以减少内存开辟跟拷贝的次数。
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容