我使用go version go1.17.2 linux/amd64
编写了下面的程序探究Go slice的扩容机制:
package main
import "fmt"
func main() {
s := []int{1, 2}
s = append(s, 3, 4, 5)
fmt.Printf("%d %d", len(s), cap(s))
fmt.Println()
s = append(s, 6, 7, 8)
fmt.Printf("%d %d", len(s), cap(s))
fmt.Println()
}
程序的输出是
而如果是在1024的限度内指数增长应该是[5, 8], 但是这里的cap为什么是6?
有疑问加站长微信联系(非本文作者)

如果
这样得到的结果的cap是8
是的,这样我尝试了,的确是8
2楼 @YanDaojiang 查了下,和内存对齐有关。 正常需要5Byte,对齐后占用的cap为6Bytes
谢谢 我明白了。刚刚还看到了这篇文章" Go slice扩容深度分析" 讲的也很清楚。