【发布时间】:2021-08-22 15:45:43
【问题描述】:
我想了解使用make([]int, 0) 创建一个空切片时会发生什么。我做这个代码进行测试:
emptySlice := make([]int, 0)
fmt.Println(len(emptySlice))
fmt.Println(cap(emptySlice))
fmt.Println(unsafe.Sizeof(emptySlice))
大小和容量返回很明显,都是0,但是slice的大小是24字节,为什么?
24 字节应该是 3 int64 对吧?一个 24 字节切片的内部数组应该是这样的:[3]int{},那么为什么一个空切片有 24 个字节?
【问题讨论】:
-
即切片头的大小。进一步阅读:dave.cheney.net/2018/07/12/slices-from-the-ground-up
-
请注意,在 32 位系统上,大小为 12 字节。
标签: go optimization size slice sizeof